我有一个Laravel应用程序,显示汽车make
,model
,year
,trim
的列表。
显示make
的页面加载列表后,用户点击特定make
,显示所有model
,以此类推。
这些是我的表(已经创建的关系):
使
- id
模型- id
- id_make
年
- id
- id_model
修剪
- id
- id_year
当显示make
的列表时,如何只查询make
至少有一个model
和至少有一个year
至少有一个trim
?
这是一个简单的查询:
Make::query()->whereHas('model',function ($query){
$query->whereHas('year',function ($query2){
$query2->whereHas('trim',function ($query3){
$query3->orderByDesc('id');
});
});
})
->get();
你也可以添加这样的条件
Make::query()->whereHas('model', function ($query) {
$query->whereHas('year', function ($query2) {
$query2->whereHas('trim', function ($query3) {
$query3->orderByDesc('id');
})
->orderByDesc('id');
})
->orderByDesc('id');
})
->orderByDesc('id')
->get();
但这并不好
最好使用深层关系阅读下面的包文档
https://github.com/staudenmeir/eloquent-has-many-deep