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

如何将关联查询SQL改写为正确的Laravel ORM Relation查询语句

你之前的代码报错和whereHas返回集合没有关系,问题出在关联条件的写法错误:直接在whereHas外侧写关联表的where条件,Laravel会默认将该条件拼到主表product的查询语句中,而product表本身没有ware_houses.variant_id字段,自然会触发字段不存在的SQL错误。

前置前提

首先确认你已经在Product模型中定义了正确的一对多关联:

// App\Models\Product.php
public function ware_houses()
{
    return $this->hasMany(WareHouse::class, 'product_id', 'id');
}

正确实现代码

要对关联表加筛选条件,需要把条件写在whereHas的闭包参数内:

Product::whereHas('ware_houses', function ($query) {
    // 这里的条件会作用于关联的 ware_houses 表
    $query->where('variant_id', 1);
})->get();

如果你需要同时返回匹配的关联仓库数据,避免N+1查询问题,可以加上with预加载:

Product::with('ware_houses')
    ->whereHas('ware_houses', function ($query) {
        $query->where('variant_id', 1);
    })
    ->get();

上述代码生成的执行SQL和你给出的原生SQL逻辑完全一致,可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 22:54:01