为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 多对多关联查询

Laravel 多对多关联查询

PHP
慕森王 2019-03-18 14:43:08
对于Laravel 的多对多关联该如何查询三个表useridname1aaa2bbb3cccroleidname1管理员2编辑3普通用户4特殊用户role_userrole_iduser_id1123334123224232模型里都定义了正确的多对多关联User::with('roles')->whereHas('roles', function($query) {     $query->whereIn('role_id', [2,4]); })->get();如果使用上面这种方式查询出来的是用户权限为『编辑或者特殊用户』的用户。该如何查询『即是编辑又是特殊用户』的 user 数据呢
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

查询『即是编辑又是特殊用户』,其实就是获取 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()


查看完整回答
反对 回复 2019-03-18
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

只需要改写一下where条件就ok了

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


查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 398 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信