已有40人关注
thinkphp中join用法
发表在PHP图书答疑 2018-01-26 《零基础学PHP》第15 章 ThinkPHP 框架
是否精华
版块置顶:

thinkphp中连贯操作join,在书上没有详细的介绍。怎么用join对于初学者而言还比较困惑。

在thinkphp网站上找了一圈没有很好的答案。下面来介绍一下join的用法,帮助大家学习。


JOIN方法也是连贯操作方法之一,用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

附上join使用代码:

$data = M("groups g")    
->field('g.id,g.group_name,e.uid')   
->join('left join equipment e ON g.group_name = e.group_name')
->where(array('g.user_id' => '1'))
->select();


下面是手册中的例子:

join通常有下面几种类型,不同类型的join操作会影响返回的数据结果。

  • INNER JOIN: 如果表中有至少一个匹配,则返回行,等同于 JOIN

  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

  • FULL JOIN: 只要其中一个表中存在匹配,就返回行


join方法可以支持以上四种类型,例如:

$Model = M('Artist');
$Model->join('think_work ON think_artist.id = think_work.artist_id')
->join('think_card ON think_artist.card_id = think_card.id')
->select();

join方法支持多次调用,但指定的数据表必须是全称,但我们可以这样来定义:
 
 $Model->join('__WORK__ ON __ARTIST__.id = __WORK__.artist_id')

->join('__CARD__ ON __ARTIST__.card_id = __CARD__.id')

->select();
 
 
 __WORK__和 __CARD__在最终解析的时候会转换为 think_work和 think_card。
 
 
 如果join方法的参数用数组的话,只能使用一次join方法,并且不能和字符串方式混合使用。 例如:
 
 join(array(' __WORK__ ON __ARTIST__.id = __WORK__.artist_id',
     '__CARD__ ON __ARTIST__.card_id = __CARD__.id'))
 
 
使用数组方式的情况下,第二个参数无效。因此必须在字符串中显式定义join类型,例如:

join(array(' LEFT JOIN __WORK__ ON __ARTIST__.id = __WORK__.artist_id',
    'RIGHT JOIN __CARD__ ON __ARTIST__.card_id = __CARD__.id'))


2018-01-26 21:24:14编辑
分享到:
精彩评论 2
andy
学分:2118 LV10
TA的每日心情
继续努力
2017-02-06 23:42:34
2018-01-29
沙发

谢谢分享,就是格式太乱了。

皓月追梦赤子
学分:2976 LV11
2018-01-29
板凳

andy 发表于2018-01-29 13:21

谢谢分享,就是格式太乱了。

是啊,网站文本编辑器没有可以设置字体样式
首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照