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

Laravel 中如何实现带IS NULL条件的Join关联查询

解决方案

你原写法的问题在于:多次调用$join->on()默认会用AND连接多个条件,和你需要的OR逻辑不符,同时IS NULL是特殊的判断语法,不能直接用普通的on二元运算符写法。

正确的写法有两种:

写法1(推荐,可读性更高)

直接在join闭包中使用orWhereNull方法:

$query = Table1::join('table2', function($join){
    $join->on('table1.col1', '=', 'table2.col1')
         ->orWhereNull('table1.col2');
});

写法2(用on方法实现)

如果要统一用on方法编写,可以搭配DB::raw处理NULL关键字:

$query = Table1::join('table2', function($join){
    $join->on('table1.col1', '=', 'table2.col1')
         ->orOn('table1.col2', 'is', \DB::raw('NULL'));
});

如果你的JOIN还有其他额外的关联条件,为了避免逻辑优先级混乱,可以把这组OR条件包裹在闭包里:

$query = Table1::join('table2', function($join){
    $join->where(function ($query) {
        $query->on('table1.col1', '=', 'table2.col1')
              ->orWhereNull('table1.col2');
    });
    // 此处可继续添加其他AND连接的JOIN条件,不会干扰上方OR组的逻辑
});

内容的提问来源于stack exchange,提问作者Bvc...

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 14:45:05