Laravel多对多关系,由两个用户模型共享角色
问题很简单,如果我在用户和角色之间有多对多关系,并且两个用户之间有一个共享角色,那么有没有一种雄辩的方法来获得该共享角色,或者我必须调用他们的每个角色并使用两个foreach循环来匹配他们的记录。我认为下面的查询应该可以做到这一点: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() ->
$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)
。