Laravel 5.6:汽车有很多颜色,有很多图像。尝试查找汽车1的所有“红色”图像时,我得到所有汽车的红色图像

时间:2018-07-19 03:06:00

标签: php laravel eloquent relational-database eager-loading

我有三种型号:

Car.phpColour.phpImage.php

它们具有以下关系:

Car belongsToMany Colour:因为汽车可以有多种颜色。

Colour belongsToMany Car:因为许多汽车上都会出现一种颜色。

Car belongsToMany Image:因为汽车可以具有多个图像。

Image belongsToMany Car:因为一个图像可以被多辆汽车使用。

Image belongsTo Colour:因为每个图像都必须具有颜色。

Colour hasMany Image:因为在许多图像中都可以找到红色。

如果我写Car::find(1)->load('colours.images);,它将返回所有与之相关的颜色,但是每种颜色都有个使用该颜色的图像。因此,我将看到红色的汽车1、2、3等,而不仅仅是汽车1的图像。

colours.images似乎忽略了最初的汽车。

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

尝试类似Car :: find($ id)-> with(['colours.images'=> function($ query){$ query-> where('car_id',$ id);}])类似的东西< / p>

答案 1 :(得分:0)

您需要的是HasManyThrough关系,但是问题是您的汽车,颜色和图像处于多对多关系(hasManyThrough仅适用于一对多关系嵌套)。

检查this answer以获得更多信息和可能的解决方法。