多對多關聯
| 版本 | 功能調整 |
|---|---|
| 5.0.8 | 中間表名無需前綴,并支持定義中間表模型 |
| 5.0.6 |
attach方法返回值改為Pivot對象 |
關聯定義
例如,我們的用戶和角色就是一種多對(dui)多的關系,我們在User模型定義如下(xia):
<?php
namespace appindexmodel;
use thinkModel;
class User extends Model
{
public function roles()
{
return $this->belongsToMany('Role');
}
}
belongsToMany方法的(de)參數(shu)如下(xia):
belongsToMany('關聯模型名','中間表名','外鍵名','當前模型關聯鍵名',['模型別名定義']);
5.0.8+版本開始,中(zhong)間表(biao)(biao)(biao)名(ming)無需(xu)添加表(biao)(biao)(biao)前綴,并支(zhi)持定義(yi)中(zhong)間表(biao)(biao)(biao)模型,例(li)如:
public function roles()
{
return $this->belongsToMany('Role','ppindexmodelAccess');
}
關聯查詢
我們可以通過下(xia)面的(de)方(fang)式獲取關聯數據
$user = User::get(1);
// 獲取用戶的所有角色
dump($user->roles);
如(ru)果要獲取中間表數據,可以使(shi)用
$user = User::get(1);
$roles = $user->roles;
foreach($roles as $role){
// 獲取中間表數據
dump($role->pivot);
}
關聯新增
$user = User::get(1);
// 增加關聯數據 會自(zi)動寫(xie)入(ru)中間表數據
$user->roles()->save(['name'=>'管(guan)理員']);
// 批量增加(jia)關聯數據
$user->roles()->saveAll([
['name'=>'管理員'],
['name'=>'操作(zuo)員'],
]);
只新增中間表數據,可以使用(yong)
$user = User::get(1);
// 僅增加關聯的中間表數據
$user->roles()->save(1);
// 或者
$role = Role::get(1);
$user->roles()->save($role);
// 批量增加關聯數據
$user->roles()->saveAll([1,2,3]);
單(dan)獨(du)更新(xin)中間(jian)表數據,可(ke)以使(shi)用:
$user = User::get(1);
// 增加關聯的(de)中間(jian)表數據
$user->roles()->attach(1);
// 傳入中間表的(de)額外屬性
$user->roles()->attach(1,['remark'=>'test']);
// 刪除中間表數據
$user->roles()->detach([1,2,3]);
V5.0.6+版本開始,attach方法的返回值是一個Pivot對象實例,如果是附加多個關聯數據,則返回Pivot對象實例的數組。
定義相對的關聯
我們可以在Role模型中(zhong)定義一(yi)個相對的關(guan)聯(lian)關(guan)系,例(li)如(ru):
<?php
namespace appindexmodel;
use thinkModel;
class Role extends Model
{
public function users()
{
return $this->belongsToMany('User');
}
}
文檔最后更新時間:2018-06-09 15:41:20
未解決你的問題?請到「問答社區」反饋你遇到的問題
