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

如何使用Laravel Query Builder实现多字段关联的左连接查询

Laravel 查询构造器实现代码

你需要的查询可以通过带闭包的leftJoin方法实现,写法如下:

// 要匹配的目标ID
$listingId = 225678;

$data = \Illuminate\Support\Facades\DB::table('l')
    ->select('l.id', 'l.title', 'is1.similarity')
    ->leftJoin('is1', function (\Illuminate\Database\Query\JoinClause $join) use ($listingId) {
        // 包裹第一组AND条件:l.id = is1.listing_id1 且 is1.listing_id2 = 目标ID
        $join->where(function ($query) use ($listingId) {
            $query->whereColumn('l.id', 'is1.listing_id1')
                ->where('is1.listing_id2', $listingId);
        })
        // 包裹第二组AND条件,和第一组用OR连接
        ->orWhere(function ($query) use ($listingId) {
            $query->whereColumn('l.id', 'is1.listing_id2')
                ->where('is1.listing_id1', $listingId);
        });
    })
    ->get();

注意事项

  • 对比两个表的字段值必须使用whereColumn方法,若使用普通where方法,第二个参数会被识别为字符串值而非字段名,导致查询逻辑错误
  • 两层闭包的作用是保证两组AND条件的运算优先级和原生SQL完全一致,不会出现逻辑混乱
  • 若基于Eloquent模型查询,仅需将DB::table('l')替换为对应模型的查询起始方法即可,其余语法通用

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

相关产品推荐
方舟 Agent Plan

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

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