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

Laravel 多对多关联查询?

Laravel 多对多关联查询?

慕婉清6462132 2019-02-06 10:06:54
User::with('roles')->whereHas('roles', function($query) {    $query->whereIn('role_id', [2,4]);})->get();
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超22个赞

查询『即是编辑又是特殊用户』,其实就是获取 role_id=2 和 role_id=4 的 user_id 的交集,用 SQL 可以写成:

SELECT

    user_id

FROM

    role_user

WHERE

    role_id IN (2, 4)

GROUP BY

    user_id

HAVING

    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-13
?
一只名叫tom的猫

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

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

User::with('roles')->whereHas('roles', function($query) {

    $query->where('role_id', 2)

        ->where('role_id', 4);

})->get();


查看完整回答
反对 回复 2019-03-13
?
翻阅古今

TA贡献1780条经验 获得超5个赞

或者试一下

User::with('roles')->whereHas('roles', function($query) {

    $query->where([['role_id', 2],['role_id',4]]);

})->get();


查看完整回答
反对 回复 2019-03-13
  • 3 回答
  • 0 关注
  • 808 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号