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

Laravel:如何查询关联完整层级(model/year/trim)的make数据?

Laravel 查询关联完整的Make数据(需关联Model、Year、Trim)

第一步:先确保模型已定义正确关联

根据你的表结构,需要在对应模型中设置好关联关系:

  • Make模型(app/Models/Make.php)
public function models()
{
    return $this->hasMany(Model::class, 'id_make');
}
  • Model模型(app/Models/Model.php)
public function years()
{
    return $this->hasMany(Year::class, 'id_model');
}
  • Year模型(app/Models/Year.php)
public function trims()
{
    return $this->hasMany(Trim::class, 'id_year');
}

第二步:查询符合条件的Make数据

有两种简洁的写法可以实现你的需求:

写法一:用嵌套has()(最便捷)

直接通过链式关联的方式,让Laravel自动筛选出每一层都有关联数据的Make:

$validMakes = Make::has('models.years.trims')->get();

这个方法会自动生成SQL的EXISTS子查询,确保当前Make下至少有一个Model,该Model至少有一个Year,且该Year至少有一个Trim。

写法二:用嵌套whereHas()(适合加额外筛选条件)

如果之后需要给某一层加额外限制(比如只选2010年后的Year),可以用这种更灵活的写法:

$validMakes = Make::whereHas('models', function ($modelQuery) {
    $modelQuery->whereHas('years', function ($yearQuery) {
        // 这里可以加额外条件,比如 $yearQuery->where('year', '>=', 2010)
        $yearQuery->has('trims');
    });
})->get();

两种写法最终效果一致,你可以根据是否需要额外筛选条件来选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:06:32