如何通过Laravel搜索许多人



三个表

用户

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,其中至少包含您传递给它的值之一。将havinggroup by结合使用允许您规定要包含一定数量的数字(在这种情况下,所有这些都)。

最新更新