`JOIN`方法用于根據兩個或多個表中的列之間的關系,從這些表中查詢數據。通常有下面幾種類型,不同類型的join操作會影響返回的數據結果。推薦使用`view`查詢方法替代`join`方法。
- **INNER JOIN**: 等同于 JOIN(默認的JOIN類型),如果表中有至少一個匹配,則返回行
- **LEFT JOIN**: 即使右表中沒有匹配,也從左表返回所有的行
- **RIGHT JOIN**: 即使左表中沒有匹配,也從右表返回所有的行
- **FULL JOIN**: 只要其中一個表中存在匹配,就返回行
## 說明
> join ( mixed join [, mixed $condition = null [, string $type = 'INNER']] )
> leftJoin ( mixed join [, mixed $condition = null ] )
> rightJoin ( mixed join [, mixed $condition = null ] )
> fullJoin ( mixed join [, mixed $condition = null ] )
**參數**
### join
要關聯的(完整)表名以及別名
支持的寫法:
* 寫法1:[ '完整表名或者子查詢'=>'別名' ]
* 寫法2:'不帶數據表前綴的表名'(自動作為別名)
* 寫法2:'不帶數據表前綴的表名 別名'
### condition
關聯條件,只能是字符串。
### type
關聯類型。可以為:`INNER`、`LEFT`、`RIGHT`、`FULL`,不區分大小寫,默認為`INNER`。
**返回值**
模型對象
## 舉例
~~~
Db::table('think_artist')
->alias('a')
->join('work w','a.id = w.artist_id')
->join('card c','a.card_id = c.id')
->select();
~~~
~~~
Db::table('think_user')
->alias('a')
->join(['think_work'=>'w'],'a.id=w.artist_id')
->join(['think_card'=>'c'],'a.card_id=c.id')
->select();
~~~
默認采用INNER JOIN 方式,如果需要用其他的JOIN方式,可以改成
~~~
Db::table('think_user')
->alias('a')
->leftJoin('word w','a.id = w.artist_id')
->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();
~~~
- 簡介
- 數據庫配置
- 分布式數據庫
- 查詢構造器
- 查詢數據
- 新增數據
- 更新數據
- 刪除數據
- 鏈式操作
- Where
- Table
- Alias
- Field
- Strict
- Limit
- Page
- Order
- Group
- Having
- Join
- Union
- Distinct
- Lock
- Cache
- Comment
- FetchSql
- Force
- Partition
- Replace
- FailException
- Extra
- Duplicate
- Sequence
- Procedure
- View
- 聚合查詢
- 分頁查詢
- 時間查詢
- 高級查詢
- 子查詢
- 原生查詢
- 事務操作
- 存儲過程
- 查詢事件
- JSON字段
- 模型
- 定義
- 新增
- 更新
- 刪除
- 查詢
- 查詢范圍
- 只讀字段
- JSON字段
- 自動時間寫入
- 獲取器
- 修改器
- 搜索器
- 類型轉換
- 模型輸出
- 模型事件
- 虛擬模型
- 關聯
- 一對一關聯
- 一對多關聯
- 遠程一對多
- 遠程一對一
- 多對多關聯
- 多態一對多
- 多態一對一
- 關聯預載入
- 關聯統計
- 關聯輸出
- SQL監聽
- 緩存機制
- 字段緩存
- 查詢緩存
- 擴展
- 自定義查詢類
- 自定義數據庫驅動