如何在数据透视模型中实现关系

时间:2019-03-23 11:44:32

标签: php laravel eloquent

今天,我讨论了如何在数据透视模型中实现Laravel的hasMany关系。在我的示例中,通过n:m关系将几辆车分配给一个任务。由于必须记录车辆状态,因此枢纽分析表hasMany会记录日志。

enter image description here

要附加关系,必须实现数据透视模型。在此处查看更多信息: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_atupdated_at属性,因此有必要在withPivot方法中附加ID:

public function vehicles() {
        return $this->belongsToMany(Vehicle::class)
            ->withPivot(['id']) // important!
            ->using(MissionVehicle::class);
    }

现在您的关系应该可以工作了。

1 个答案:

答案 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']);
}