如何通过laravel雄辩地进行多对多搜索

时间:2019-03-10 11:24:14

标签: laravel

三个表

用户

id  name        
1   a    
2   b     
3   c   

角色

id  name        
1   aa       
2   bb      
3   cc      
4   dd    

role_user

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; 我该怎么办?

1 个答案:

答案 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时,实际上是在要求包含至少一个传递给它的值的结果。将havinggroup by结合使用可以使您规定要包括一定数量的它们(在本例中为全部)。