laravel - 难以理解 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"}
我希望这是有道理的,任何帮助表示赞赏,谢谢。
解决方案
您错误地定义了User
to上的关系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');
}
然后您可以cars
从user
或users
从访问car
。
推荐阅读
- cryptography - 解码具有奇怪长度的 ASN1 编码的“主题密钥标识符”
- javascript - 合并 2 个数组,同时忽略空字段
- javascript - JavaScript 查找拆分字符在字符串中的位置
- python-3.x - RadioBox 信号混乱
- r - 有没有办法更改 R 的 pdp 包中的标题颜色?
- php - PayPal API - NSS:未找到客户端证书(未指定昵称)
- azure-cosmosdb - 如何在文档子数组上执行 ALL() 或 ANY()
- r - 将网格线添加到带有背景图像的 ggplot
- laravel - TypeError:无法读取未定义的属性“标题”
- excel - Excel 搜索栏