You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:24:05