Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel雄辩-如何使用ORM将Where条件添加到远亲模型中?_Laravel_Laravel 5_Eloquent_Laravel 5.2 - Fatal编程技术网

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方法的地方。