首页 > 解决方案 > Laravel 5.6:汽车有很多颜色有很多图像。当试图找到汽车 1 的所有“红色”图像时,我得到所有汽车的红色图像

问题描述

我有三个模型:

Car.php, Colour.php, Image.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忽略了最初的汽车。

我究竟做错了什么?

标签: phplaraveleloquentrelational-databaseeager-loading

解决方案


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


推荐阅读