JOIN方法也是連貫操作方法之一,用於根據兩個或多個表中的列之間的關系,從這些表中查詢數據。
附上項目中的left join用法的代碼:
1 $data = M("groups g") 2 ->field('g.id,g.group_name,e.uid') 3 ->join('left join equipment e ON g.group_name = e.group_name') 4 ->where(array('g.user_id' => '1')) 5 ->select();
下面是手冊中的例子:
join通常有下面幾種類型,不同類型的join操作會影響返回的數據結果。
- INNER JOIN: 如果表中有至少一個匹配,則返回行,等同於 JOIN
- LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
- RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
- FULL JOIN: 只要其中一個表中存在匹配,就返回行
join方法可以支持以上四種類型,例如:
1 $Model = M('Artist'); 2 $Model 3 ->join('think_work ON think_artist.id = think_work.artist_id') 4 ->join('think_card ON think_artist.card_id = think_card.id') 5 ->select();
join方法支持多次調用,但指定的數據表必須是全稱,但我們可以這樣來定義:
1 $Model 2 ->join('__WORK__ ON __ARTIST__.id = __WORK__.artist_id') 3 ->join('__CARD__ ON __ARTIST__.card_id = __CARD__.id') 4 ->select();
__WORK__
和 __CARD__
在最終解析的時候會轉換為 think_work
和 think_card
。
默認采用INNER JOIN 方式,如果需要用其他的JOIN方式,可以改成
1 $Model->join('RIGHT JOIN __WORK__ ON __ARTIST__.id = __WORK__.artist_id')->select();
或者使用:
1 $Model->join('__WORK__ ON __ARTIST__.id = __WORK__.artist_id','RIGHT')->select();
join方法的第二個參數支持的類型包括:INNER LEFT RIGHT FULL。
如果join方法的參數用數組的話,只能使用一次join方法,並且不能和字符串方式混合使用。 例如:
1 join(array(' __WORK__ ON __ARTIST__.id = __WORK__.artist_id','__CARD__ ON __ARTIST__.card_id = __CARD__.id'))
使用數組方式的情況下,第二個參數無效。因此必須在字符串中顯式定義join類型,例如:
1 join(array(' LEFT JOIN __WORK__ ON __ARTIST__.id = __WORK__.artist_id','RIGHT JOIN __CARD__ ON __ARTIST__.card_id = __CARD__.id'))