首页 > 解决方案 > 难以理解 Eloquent 关系

问题描述

我无法理解 Eloquent 关系。

假设我有四个包含数据的表

用户

id
...

用户汽车

user_id
car_id
color_id

汽车

id
make
model

颜色

id
color

现在我了解如何获取选定用户的 UsersCars

User.php Model

public function cars()
{
    $this->hasMany(Car::class);
}

然后我可以让用户的汽车进入视图

    public function show(User $user)
    {
        $cars= $user->cars;

        return $cars;
    }

所以说给定的用户 id 1 有 2 辆车,我可以用 $user->cars() 得到他的车,这给了我类似的东西

{"id":1, "car_id":3, "color_id": 2}
{"id":1, "car_id":10, "color_id": 4}

但我没有得到的是如何进一步获得相关 id 的实际值。因此,一旦我将控制器中的 $users->cars() 作为 $cars 传递给我的视图,我就可以获得用户汽车的实际品牌、型号和颜色。

就像是

@foreach ($cars as $car)
    {{ $car->make }} : {{ $car->model }}
    {{ $car->color }}
@endforeach

所以一旦我打电话给 $user->cars() 我需要类似的东西

{"id":1, "car_id":3, "make" => "Ford", "model" => "Fiesta", "color_id": 2, "color":"red"}
{"id":1, "car_id":10, "make" => "Volkswagon", "model" => "Golf", "color_id": 4, "color":"blue"}

我希望这是有道理的,任何帮助表示赞赏,谢谢。

标签: laraveleloquent

解决方案


您错误地定义了Userto上的关系Car

既然与用户和汽车的关系是many-to-many你必须使用belongsToMany()雄辩的关系。

文档 => https://laravel.com/docs/5.8/eloquent-relationships#many-to-many

用户模型

public function cars()
{
    return $this->belongsToMany(Car::class, 'user_cars', 'user_id', 'car_id');
}

汽车模型

public function users()
{
    return $this->belongsToMany(User:class, 'user_cars', 'car_id', 'user_id');
}

然后您可以carsuserusers从访问car


推荐阅读