Laravel一对多查询

Laravel OneToMany query

我是 Laravel 和 Eloquent 模型的新手,我发现即使阅读了文档也很难理解最简单的查询。

我有两个模型 Measure 和 MeasureType,我想 select 某种类型的所有度量。 sql 会是什么样子:

select * from measures m
      join measure_types mt on mt.id=m.measure_type_id
      join measure_type_trans t on t.measure_type_id=mt.id
      where t.name='xyz';

在测量中我有:

public function type()
    {
        return $this->belongsTo(MeasureType::class, 'measure_type_id');
    }

并且在 MeasureType 中:

public function measures()
    {
        return $this->hasMany(Measure::class);
    }

名称列在翻译中table table measure_type_trans 我如何做这样简单的查询?

如果您想要类型并嵌套在其中属于它的度量

$measureType = MeasureTypeTrans::where('name', 'xyz')->with('type.measures')->first();

//you can access the measures with the attribute having the same name as the relation
$measures = $measureType->type->measures;

如果您只想将度量作为一个集合(几乎与您发布的查询相同)

$name = 'xyz';
$measures = Measure::whereHas('type', function ($typeQueryBuilder) use($name) {
    $typeQueryBuilder->whereHas('typeTrans', function($typeTransQB) use($name) {
        $typeTransQB->where('name', $name);
    });
})->get();