三个表
id name
1 a
2 b
3 c
id name
1 aa
2 bb
3 cc
4 dd
role_id user_id
1 1
2 3
2 1
3 4
3 3
3 2
3 1
Laravel代码:
User::with('roles')->whereHas('roles', function($query) {
$query->whereIn('role_id', [2, 4]);
})->get();
此查询返回用户具有角色2或4, 我想让用户具有角色2和4; 我该怎么办?
答案 0 :(得分:-1)
要实现自己的目标,可以使用havingRaw():
User::with('roles')->whereHas('roles', function ($query) {
$query
->select('user_id')
->whereIn('role_id', [2, 4])
->groupBy('user_id')
->havingRaw('count(distinct(role_id))=2'); // 2 = The number of different roles i.e. count([2,4])
})->get();
使用whereIn
时,实际上是在要求包含至少一个传递给它的值的结果。将having
与group by
结合使用可以使您规定要包括一定数量的它们(在本例中为全部)。