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

I have three Models:

Car.php, Colour.php, Image.php.

They have the following relationships:

Car belongsToMany Colour: Because a car can have multiple colours.

Colour belongsToMany Car: Because a colour can appear on many cars.

Car belongsToMany Image: Because a car can have multiple images.

Image belongsToMany Car: Because one image can be used by multiple Cars.

Image belongsTo Colour: Because every image must have a colour.

Colour hasMany Image: Because the colour Red can be found in many images.

If I write Car::find(1)->load('colours.images); it returns all associated colours as expected, however each colour has every image that uses that colour. So I'll see Car 1, 2, 3 etc for Red instead of just the images for car 1.

It seems like the colours.images ignores the initial car.

What am I doing wrong?

Try something like Car::find($id)->with(['colours.images' => function ($query) { $query->where('car_id', $id); }])

What you need is HasManyThrough relation, but the problem is that your cars, colors and images are in many-to-many relationship (hasManyThrough only works with one-to-many relationship nesting).

Check this answer for more info and possible workaround.