Laravel与数据透视表的雄辩关系

时间:2019-11-23 12:50:54

标签: laravel eloquent

您好,我有两个模型User和Car和一个数据透视表user_car,其中有两个列user_id和car_id,两列的组合始终是唯一的。任何用户都可以拥有多辆汽车,而一辆汽车只能分配给一个用户

在用户模型中,我有这个

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

1 个答案:

答案 0 :(得分:0)

请使用laravel默认命名约定,例如按字母顺序car_user,以便您可以遵循。而且,这并不是一对多的关系,正如您在案例中所说的那样,这是一对多的关系。多对多关系示例类似an author can have many books published and a book can have many authors behind it,因此在数据库表中就像表中的author_idbook_id

Author_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