【问题标题】:Using Pivot table as a reference to another model使用数据透视表作为对另一个模型的引用
【发布时间】:2018-08-26 16:41:30
【问题描述】:

我正在从事拼车服务,所以我有下表架构 usercarsuser_car(数据透视表,它还有像 plate_number 这样的附加字段)所以我可以添加许多汽车,用户可以从我们已经添加的汽车中选择他的汽车并提供附加信息。那辆车将是他的车。

现在我有另一个表ride,它也引用cars_userid 我已经建立了carsusers 之间的关系。但是Ridecar_user 模型之间会有什么关系,因为car_user 可以用于许多游乐设施?

【问题讨论】:

  • “car_user”和“user_car”有什么区别,我认为您需要编辑您的问题,使其更简洁......

标签: laravel eloquent


【解决方案1】:

确保数据透视表user_car 有一个主键列,它应该类似于:

id, user_id, car_id

为该表实现UserCar 模型。

然后在您的 Ride 模型上附加与此模型的关系,例如

public function user_car(){

    return belongsTo('\App\UserCar', 'user_car_id', 'id');

}

然后,您还可以使用分配来查看该数据透视表的游乐设施

在您的 UserCar 模型上,您可以有这样的东西:

public function rides(){

    return hasMany('\App\Ride', 'user_car_id', 'id');

}

您现在可以将其作为任何其他模型引用,从您的 UserCar 模型中引用。

我个人会将此表命名为其他名称,例如 car_assignationsCarAssignation,但这是您的选择。

【讨论】:

  • 如何从 User 模型中查询游乐设施?
  • 对不起,回复晚了,有很多方法可以做到这一点,当前的答案不允许这样做,但您可以设置 HasManyThrough 关系,或使用 with() 方法加载“子关系”,或者您可以只编写 sql 并进行连接,或者使用 eloquent 进行连接。很多很多方法
【解决方案2】:

您应该为 3 个桌子汽车、用户、骑在每三个模型中定义枢轴,您创建 2 个与其他两个桌子的关系 所以你的数据透视表有三列,分别是 user_id、car_id、ride_id 例如你的用户模型是这样的:

public function car() {
return $this->belongsToMany('car', 'user_car_ride');
}

public function ride() {
return $this->belongsToMany('ride', 'user_car_ride');
}

user_car_ride 是您的数据透视表名称

【讨论】:

    猜你喜欢
    • 2013-12-18
    • 2013-06-26
    • 2021-02-06
    • 2018-06-28
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 2017-11-22
    • 2014-01-12
    相关资源
    最近更新 更多