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

Laravel中leftJoin同时使用on和orOn时如何给OR条件加括号

解决方案

你需要将OR关联的两个条件包裹在on方法的闭包参数内,Laravel查询构造器会自动为这部分条件加上括号,正确写法如下:

TABLE1::leftJoin('table2', function($join){
    // 闭包内的条件会被自动包裹在括号中
    $join->on(function($query) {
        $query->on('table1.id', '=', 'table2.id')
              ->orOn('table1.tid', '=', 'table2.tid');
    })->on('table1.x', '=', 'table2.x');
})->get();

原理解释

你之前的写法生成的JOIN条件为:

table1.id = table2.id OR table1.tid = table2.tid AND table1.x = table2.x

由于SQL语法中AND的运算优先级高于OR,实际执行逻辑和你预期的括号逻辑完全不符。

使用闭包包裹OR条件的写法,最终生成的JOIN条件就是你需要的:

(table1.id = table2.id OR table1.tid = table2.tid) AND table1.x = table2.x

逻辑完全符合要求。

内容的提问来源于stack exchange,提问作者Inigo EC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:27:02