首頁  >  文章  >  php框架  >  thinkphp5中join的用法是什麼

thinkphp5中join的用法是什麼

WBOY
WBOY原創
2022-04-25 11:01:165420瀏覽

在thinkphp5中,join用於根據兩個或多個表中列之間的關係,從這些表中查詢數據,是連貫操作方法之一,返回的結果是一個模型對象,語法為「join ( 要關聯的表名以及別名[ 關聯條件[ 關聯類型]] )」。

thinkphp5中join的用法是什麼

本文操作環境:Windows10系統、ThinkPHP5版、Dell G3電腦。

thinkphp5中join的用法是什麼

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

說明

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

參數

join:要關聯的(完整)表名以及別名,支援三種寫法:

  • 寫法1:[ '完整表名或子查詢'=>'別名' ]

  • #寫法2:'完整表名別名'

  • 寫法3:'不帶資料表前綴的表名'

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

type:關聯類型。可以是:INNER、LEFT、RIGHT、FULL,不區分大小寫,預設為INNER。

傳回值:模型物件

join通常有下列幾種類型,不同類型的join運算會影響傳回的資料結果。

  • INNER JOIN: 等同於JOIN(預設的JOIN類型),如果表中有至少一個匹配,則返回行

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

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

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

#範例如下:

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傳回的語句帶有() ,所以這裡不需要在兩端再加上()。

推薦學習:《PHP影片教學

以上是thinkphp5中join的用法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn