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

Laravel join关联使用whereRaw自动添加is null问题如何解决

问题原因

你遇到的异常SQL生成问题来自两个错误点:

  • 调用join()方法对应SQL的INNER JOIN,你的目标语句需要左关联variations表,需要替换为leftJoin()方法
  • 关联闭包内的where()写法不符合Laravel查询构造器规则:当where()仅传入1个参数时,构造器会默认识别为「判断该表达式是否为NULL」,因此自动拼接了is null后缀,导致关联条件不符合预期
修正后代码
Transaction::leftJoin('purchase_lines as pl', 'transactions.id', '=', 'pl.transaction_id')
    ->leftJoin('transaction_sell_lines as sl', 'transactions.id', '=', 'sl.transaction_id')
    ->leftJoin('variations as v', function ($query) {
        // 按正常三参数格式写where条件,字段在前,表达式放在最后用DB::raw包裹
        $query->where('v.id', '=', DB::raw("CONCAT(COALESCE(sl.variation_id, ''), COALESCE(pl.variation_id, ''))"));
    })
    // 此处可继续添加其他查询条件、选择字段等逻辑
    ->get();
效果验证

修改后生成的SQL会完全匹配你给出的目标语句结构,你可以通过DB::enableQueryLog()打印执行日志自行核对。如果后续需要处理两个关联表的variation_id同时为空的特殊场景,可直接在关联闭包内追加orWhere条件扩展逻辑即可。

内容的提问来源于stack exchange,提问作者Martin Christopher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:36:03