您好,我有两个模型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
答案 0 :(得分:0)
请使用laravel默认命名约定,例如按字母顺序car_user
,以便您可以遵循。而且,这并不是一对多的关系,正如您在案例中所说的那样,这是一对多的关系。多对多关系示例类似an author can have many books published and a book can have many authors behind it
,因此在数据库表中就像表中的author_id
和book_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