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

Laravel中如何在Left Join内编写嵌套Join关联查询

Laravel 多表嵌套左连接正确实现

错误说明

原有写法的问题在于:leftJoin 方法传入的闭包仅用于定义当前连接表和主表的ON关联条件,不支持直接在闭包内追加其他关联表的JOIN逻辑。目标SQL的逻辑是将orders、factories、setup三表内连接的结果集作为临时表,和主表po做左连接,这类场景需要使用子查询连接方法实现。

正确实现代码

// 第一步:构造三表内连接的子查询
$nestedJoinSub = DB::table('orders AS xo')
    ->join('factories AS xs', 'xs.factory_id', '=', 'xo.factory_id')
    ->join('setup AS sp', 'sp.factory_id', '=', 'xs.legacy_factory_id')
    ->select([
        // 必须包含关联用的字段
        'xo.production_id',
        // 此处按需添加你需要查询的xo、xs、sp表的其他字段
    ]);

// 第二步:将子查询作为左连接的临时表关联主表
$finalQuery = DB::table('你的主表名 AS po') // 替换为实际使用的主表,例如productions AS po
    ->leftJoinSub($nestedJoinSub, 'xo', function ($join) {
        $join->on('xo.production_id', '=', 'po.production_id');
    })
    // 后续select、where、groupBy等查询逻辑正常追加即可
    ->get();

注意事项

  • 子查询的select语句中必须包含关联用到的production_id字段,否则关联时会抛出字段不存在的错误
  • 如果需要根据传入参数给子查询加过滤条件,直接在构造$nestedJoinSub的时候追加where条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:57:26