首页 > 解决方案 > 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

标签: laraveleloquent

解决方案


请按照字母顺序使用 laravel 默认命名约定car_user,以便您可以遵循。此外,正如您在案例中所说的那样,它不是多对多关系,而是一对多关系。多对多关系示例在数据库表中an author can have many books published and a book can have many authors behind it就像在表中一样author_idbook_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

推荐阅读