【问题标题】:Connect pivot table with multiple tables in Eloquent在 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 匹配的角色。

标签: php database laravel eloquent orm


【解决方案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();

【讨论】:

    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多