Laravel 多对多关联查询

对于Laravel 的多对多关联该如何查询

三个表

user

idname
1aaa
2bbb
3ccc

role

idname
1管理员
2编辑
3普通用户
4特殊用户

role_user

role_iduser_id
11
23
33
41
23
22
42
32

模型里都定义了正确的多对多关联

User::with('roles')->whereHas('roles', function($query) {
    $query->whereIn('role_id', [2,4]);
})->get();

如果使用上面这种方式查询出来的是用户权限为『编辑或者特殊用户』的用户。
该如何查询『即是编辑又是特殊用户』的 user 数据呢


红颜莎娜
浏览 1902回答 2
2回答

倚天杖

查询『即是编辑又是特殊用户』,其实就是获取 role_id=2 和 role_id=4 的 user_id 的交集,用 SQL 可以写成:SELECT     user_idFROM     role_userWHERE     role_id IN (2, 4)GROUP BY     user_idHAVING     COUNT(user_id) = 2在 Laravel 中可以写成:User::with('roles')->whereHas('roles', function($query) {     $query->whereIn('role_id', [2, 4])           ->groupBy('user_id')           ->havingRaw('COUNT(user_id) = ?', [2]); })->get()

繁花不似锦

只需要改写一下where条件就ok了User::with('roles')->whereHas('roles', function($query) {     $query->where('role_id', 2)         ->where('role_id', 4); })->get();
打开App,查看更多内容
随时随地看视频慕课网APP