Laravel雄辩-如何使用ORM将Where条件添加到远亲模型中?
我目前有以下情况:Laravel雄辩-如何使用ORM将Where条件添加到远亲模型中?,laravel,laravel-5,eloquent,laravel-5.2,Laravel,Laravel 5,Eloquent,Laravel 5.2,我目前有以下情况: Cars::with('cases')->with(['parts', 'parts.engines', 'parts.engines.metals']) ->orderBy('car_name', 'DESC')->orderBy('id', 'DESC'); 上面将列出我的汽车表中的所有行,以及与这些汽车的发动机相关的金属。金属表通过零件和发动机表与cars表关联 我试过使用: Cars::with('cases'
Cars::with('cases')->with(['parts', 'parts.engines', 'parts.engines.metals'])
->orderBy('car_name', 'DESC')->orderBy('id', 'DESC');
上面将列出我的汽车表中的所有行,以及与这些汽车的发动机相关的金属。金属表通过零件和发动机表与cars表关联
我试过使用:
Cars::with('cases')->whereHas(['parts', 'parts.engines', 'parts.engines.metals'], function($query){
$query->where('weight', '=', 45)
})->orderBy('car_name', 'DESC')->orderBy('id', 'DESC');
但是这个错误是错误的,因为whereHas不接受数组作为它的第一个参数,而且我看不到一种链接到与它的远程关系的方法
如何使用内置ORM在metals表中的列上应用WHERE条件?我想您的意思是:
Cars::with(['cases', 'parts', 'parts.engines', 'parts.engines.metals' => function($query){
$query->where('weight', '=', 45);
}])->orderBy('car_name', 'DESC')->orderBy('id', 'DESC');
whereHas只需要您要为其添加条件的关系的名称。因此,如果您试图将条件添加到金属中,您只需要限制parts.engines.metals关系
另一方面,当您急于加载嵌套关系时,不需要同时指定加载中间关系。也就是说,当您急切地加载parts.engines时,您不需要也急切地加载parts.engines
因此,您的查询如下所示:
Cars::with(['cases', 'parts.engines.metals'])
->whereHas('parts.engines.metals', function($query) {
$query->where('weight', '=', 45)
})
->orderBy('car_name', 'DESC')
->orderBy('id', 'DESC');
此查询将仅检索重量为45的相关金属的汽车。此外,对于检索到的车辆,它还将紧急装载与这些车辆相关的所有箱子、零件、发动机和金属。向紧急装载添加条件将仅限制所有车辆紧急装载的金属。OP希望根据相关金属的条件限制检索的汽车,这是您使用whereHas方法的地方。