Laravel Eloquent使用orWhere导致left join关联条件位置异常问题
问题说明
你当前写法的核心错误是混淆了全局查询条件和JOIN关联条件的用法:
- Eloquent中直接调用的
where/orWhere方法生成的都是全局查询规则,会统一放到SQL最终的WHERE子句中,不会归属到最近的leftJoin规则里 - 你需要的
OR逻辑属于pupils表的JOIN关联条件,不能单独调用orWhere声明
正确实现代码
需要在leftJoin中传入闭包来声明多条件关联规则,关联条件的OR逻辑需要使用专用的orOn方法:
$r = groupofpupil::where('group_id' , '=', '13') ->leftJoin('pupils', function (\Illuminate\Database\Query\JoinClause $join) { $join->on('pu_id', '=', 'pupil1_id') ->orOn('pu_id', '=', 'pupil0_id'); }) ->leftJoin('users', 'pupils.id', '=', 'users.id') ->select('*') ->get();
以上代码生成的SQL和你预期的完全一致。
内容的提问来源于stack exchange,提问作者Steen Hansen
相关产品推荐
相关产品推荐

