Laravel多对多关系,由两个用户模型共享角色

Laravel多对多关系,由两个用户模型共享角色,laravel,eloquent,Laravel,Eloquent,问题很简单,如果我在用户和角色之间有多对多关系,并且两个用户之间有一个共享角色,那么有没有一种雄辩的方法来获得该共享角色,或者我必须调用他们的每个角色并使用两个foreach循环来匹配他们的记录。我认为下面的查询应该可以做到这一点: $userId1 = 123; // just some assumption... $userId2 = 234; // can of course be a user object as well $roles = Role::query() ->

问题很简单,如果我在用户和角色之间有多对多关系,并且两个用户之间有一个共享角色,那么有没有一种雄辩的方法来获得该共享角色,或者我必须调用他们的每个角色并使用两个foreach循环来匹配他们的记录。

我认为下面的查询应该可以做到这一点:

$userId1 = 123; // just some assumption...
$userId2 = 234; // can of course be a user object as well

$roles = Role::query()
    ->whereHas('users', function ($query) use ($userId1) {
        $query->where('users.id', $userId1);
    })
    ->whereHas('users', function ($query) use ($userId2) {
        $query->where('users.id', $userId2);
    })
    ->get();

换句话说,该查询基本上意味着:为我提供与id为
$userId1
的用户以及id为
$userId2
的用户关联的所有角色。它返回了一个sql错误:SQLSTATE[23000]:完整性约束冲突:where子句中的1052列“id”不明确。我更新了答案。似乎有必要在
where()
子句中使用
table.column
组合。因此,只需将
where('id',$userId)
替换为
where('users.id',$userId)