今天,我讨论了如何在数据透视模型中实现Laravel的hasMany
关系。在我的示例中,通过n:m关系将几辆车分配给一个任务。由于必须记录车辆状态,因此枢纽分析表hasMany
会记录日志。
要附加关系,必须实现数据透视模型。在此处查看更多信息:How to define custom pivot models in Laravel
我们的数据透视模型应如下所示:
class MissionVehicle extends Pivot
{
public function logs() {
return $this->hasMany(Log::class, 'mission_vehicle_id');
}
}
由于Laravel仅自动附加created_at
和updated_at
属性,因此有必要在withPivot
方法中附加ID:
public function vehicles() {
return $this->belongsToMany(Vehicle::class)
->withPivot(['id']) // important!
->using(MissionVehicle::class);
}
现在您的关系应该可以工作了。
答案 0 :(得分:1)
使用-> first()-> pivot将为您提供中间模型,我想那不是您想要的。
$mission = Mission::find(1);
$vehicle = $mission->vehicles()->first();
应返回属于枢轴的第一辆车。如果您希望从中途返回信息,请使用
$mission->vehicles()->withPivot(['description'])->first();
或者直接在关系中
public function vehicles() {
return $this->belongsToMany(Vehicle::class)
->using(MissionVehicle::class)->withPivot(['description']);
}