三个表
用户
id name
1 a
2 b
3 c
角色
id name
1 aa
2 bb
3 cc
4 dd
coles_user
role_id user_id
1 1
2 3
2 1
3 4
3 3
3 2
3 1
拉维尔代码:
User::with('roles')->whereHas('roles', function($query) {
$query->whereIn('role_id', [2, 4]);
})->get();
此查询返回用户具有角色2或4,我想让用户有角色2和4;我该怎么办?
要实现您可以使用haveRaw()的目标:
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
时,您本质上要求retsults,其中至少包含您传递给它的值之一。将having
与group by
结合使用允许您规定要包含一定数量的数字(在这种情况下,所有这些都)。