thinkphp5 left join


thinkphp5 left join

一、總結

1、作用:left join就是即使不匹配也返回左表中的數據

2、join使用通式object join ( mixed join [, mixed $condition = null [, string $type = 'INNER']] )

弄懂這句話里面的三個參數及兩個中括號的意思

第一個參數:mixed join 混合加入的表

第二個參數:mixed $condition = null 兩個表mixed時候的條件,有默認值null,這個估計是在設置了外鍵之后可以省略這個參數

第三個參數:string $type = 'INNER' mixed時候的類型,有默認值INNER,

第一個中括號:第二三個參數都可以省略

第二個中括號:第三個參數可以省略

3、其它類型join實例Db::table('think_user')->alias('a')->join('word w','a.id = w.artist_id','RIGHT')->select();

 

二、thinkphp5 join

join通常有下面幾種類型,不同類型的join操作會影響返回的數據結果。

  • INNER JOIN: 等同於 JOIN(默認的JOIN類型),如果表中有至少一個匹配,則返回行
  • LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
  • RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
  • FULL JOIN: 只要其中一個表中存在匹配,就返回行

說明

object join ( mixed join [, mixed $condition = null [, string $type = 'INNER']] ) 

JOIN方法也是連貫操作方法之一,用於根據兩個或多個表中的列之間的關系,從這些表中查詢數據。

參數


join

要關聯的(完整)表名以及別名

支持三種寫法:

寫法1:[ '完整表名或者子查詢'=>'別名' ] 寫法2:'完整表名 別名' 寫法3:'不帶數據表前綴的表名' 

condition

關聯條件。可以為字符串或數組, 為數組時每一個元素都是一個關聯條件。

type

關聯類型。可以為:INNER、LEFT、RIGHT、FULL,不區分大小寫,默認為INNER。 

返回值
模型對象

舉例


Db::table('think_artist') ->alias('a') ->join('think_work w','a.id = w.artist_id') ->join('think_card c','a.card_id = c.id') ->select(); 
Db::table('think_artist') ->alias('a') ->join('__WORK__ w','a.id = w.artist_id') ->join('__CARD__ c','a.card_id = c.id') ->select(); 
$join = [
    ['think_work w','a.id=w.artist_id'], ['think_card c','a.card_id=c.id'], ]; Db::table('think_user')->alias('a')->join($join)->select(); 

以上三種寫法的效果一樣,__WORK__和 __CARD__在最終解析的時候會轉換為 think_work和 think_card。注意:'_表名_'這種方式中間的表名需要用大寫

如果不想使用別名,后面的條件就要使用表全名,可以使用下面這種方式

Db::table('think_user')->join('__WORK__','__ARTIST__.id = __WORK__.artist_id')->select(); 

默認采用INNER JOIN 方式,如果需要用其他的JOIN方式,可以改成

Db::table('think_user')->alias('a')->join('word w','a.id = w.artist_id','RIGHT')->select(); 

表名也可以是一個子查詢

$subsql = Db::table('think_work')->where(['status'=>1])->field('artist_id,count(id) count')->group('artist_id')->buildSql(); Db::table('think_user')->alias('a')->join([$subsql=> 'w'], 'a.artist_id = w.artist_id')->select(); 

因buildSql返回的語句帶有(),所以這里不需要在兩端再加上()。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM