在 Eloquent 中将数据透视表与多个表连接起来
Posted
技术标签:
【中文标题】在 Eloquent 中将数据透视表与多个表连接起来【英文标题】:Connect pivot table with multiple tables in Eloquent 【发布时间】:2020-12-10 06:00:40 【问题描述】:我有这个模型:
User:
id (int)
name (varchar)
Role:
id int
name (varchar)
User_Role
id (int)
id_role (int)
id_user (int)
id_company (int)
我需要使用 Eloquent (Laravel 7),使用 id_company 查询 user_role:
这是我与用户模型的关系
public function rol()
return $this->belongsToMany('\App\Models\Role','user_role','id_user','id_role');
这是我与角色模型的关系:
function user()
return $this->belongsToMany('\App\Models\User','user_role','id_role','id_user');
是否可以这样查询数据透视表:
$user->rol->where(["id_company" => $params["id_company"]])->toArray();
【问题讨论】:
您是否尝试获取角色与id_company
字段匹配的用户列表?
嗨!我正在尝试获取与该用户和id_company
匹配的角色。
【参考方案1】:
您需要首先在关系中包含数据透视表列:
public function roles()
return $this->belongsToMany('\App\Models\Role','user_role','id_user','id_role')
->withPivot('id_company');
然后就可以对数据透视表的列进行查询了:
$user->roles()->wherePivot('id_company', $params["id_company"])
->get()
->toArray();
【讨论】:
以上是关于在 Eloquent 中将数据透视表与多个表连接起来的主要内容,如果未能解决你的问题,请参考以下文章
Eloquent Query:所有具有相同类别的新闻。数据透视表
Lumen/Laravel Eloquent - 按数据透视表中的属性过滤