laravel - Laravel 雄辩的关系与数据透视表
问题描述
您好,我有两个模型 User 和 Car 以及一个具有两列 user_id 和 car_id 的数据透视表 user_car,这两列的组合始终是唯一的。任何用户都可以拥有多辆汽车,而一辆车只分配给一个用户
在用户模型中我有这个
public function cars()
{
return $this->belongsToMany('App\Car', 'user_car');
}
在汽车模型中,我有这个
public function user()
{
return $this->belongsToMany(
'App\User', 'user_car', 'car_id', 'user_id'
);
}
$user->cars
为用户返回所有汽车作为集合,这很好,但我想要
$car->user
还返回只有一个用户的集合。我不想收集,例如我想像这样获取用户ID
$car->user->id
解决方案
请按照字母顺序使用 laravel 默认命名约定car_user
,以便您可以遵循。此外,正如您在案例中所说的那样,它不是多对多关系,而是一对多关系。多对多关系示例在数据库表中an author can have many books published and a book can have many authors behind it
就像在表中一样author_id
book_id
作者_Id | book_id |
1 2
1 1
所以在你的情况下,它就像
class User {
public function cars()
{
return $this->hasMany('App\Car');
}
}
确保您user_id
的汽车表和汽车中有字段
class Car{
public function user()
{
return $this->belongsTo('App\User');
}
}
这样您就可以像这样查询它
$user = User::first();
$user->car->car_name ;
或者当你开始开车时
// to pluck the specific car
$car = Car::find(3);
$car->user->full_name or owner depends upon you
推荐阅读
- excel - 使用串联重命名文件名
- python - 在 numpy 中如何在内部转换值
- vba - 多行文本框将第一行设置为粗体
- asp.net - 更新面板不起作用:接收错误:“响应”不是有效的脚本名称。名称必须以“.js”结尾
- c# - 将 Appium 测试结果记录到控制台
- python - 有没有办法置换矩阵的子集?
- java - 使用 AJAX 在按钮单击事件后重新加载检票口组件
- laravel - 如何使用 Laravel 自定义包,称为 laravel-users?
- java - 如何修复“JAR 将为空 - 没有内容被标记为包含!” maven-jar-插件?
- python - Scrapy 规则、allowed_domains 回调和拒绝域的不同回调