【问题标题】:Laravel eloquent relationships with pivot tableLaravel 雄辩的关系与数据透视表
【发布时间】:2020-03-19 07:50:34
【问题描述】:

您好,我有两个模型 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 eloquent


    【解决方案1】:

    请使用 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
    

    【讨论】:

      猜你喜欢
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      相关资源
      最近更新 更多