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();
我是 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();