根据子关系进行雄辩过滤

  • 本文关键字:过滤 关系 laravel
  • 更新时间 :
  • 英文 :


我有一个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

最新更新