在 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 中将数据透视表与多个表连接起来的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Laravel 将两个表与数据透视表连接起来?

如何使用 Eloquent 在数据透视表中插入多行?

Eloquent Query:所有具有相同类别的新闻。数据透视表

Lumen/Laravel Eloquent - 按数据透视表中的属性过滤

使用 Laravel 的查询构建器或 Eloquent 将一个表与一个临时表进行内部连接

在 Oracle SQL 中将数据透视表转换为平面表