删除Laravel中的一对一关系

时间:2017-02-07 10:48:17

标签: php laravel laravel-5 laravel-5.2

我正在使用Laravel 5.2,我创建了一对一的关系,如下所示。

done

这完美无缺。在某些情况下,我需要通过从车辆中删除特定的驱动程序来打破这种关系。

 $driver    = Driver::find($driver->id);
 $vehicle = Vehicle::find($vehicleId);
 $vehicle->driver()->associate($driver);
 $vehicle->save();

但这不起作用。我尝试了其他一些方法。

$driver    = Driver::find($driver->id);
$vehicle = Vehicle::find($vehicleId);
$vehicle->driver_id->NULL;
$vehicle->save();

以下是两种型号。

$vehicle->driver()->delete();

$vehicle->driver()->dissociate();

在我的案例中没有任何工作。谁能请一个提示,那里有什么不对。

3 个答案:

答案 0 :(得分:1)

我认为你需要:

$vehicle->driver_id = NULL;
$vehicle->save();

答案 1 :(得分:0)

如果您在车辆和驱动程序之间使用外键,则只需要删除子表条目或使引用Null.Is driver_id为空。 在迁移中尝试这个, $ table->整数(' driver_id') - > unsigned() - > nullable() - >默认(null); 希望这能解决你的问题。

答案 2 :(得分:0)

首先,我认为您在插入数据方面做错了

$driver  = Driver::find($driver->id);
$vehicle = Vehicle::find($vehicleId);
$vehicle->driver()->associate($vehicle);
$vehicle->save();

应该是

$driver  = Driver::find($driver->id);
$vehicle = Vehicle::find($vehicleId);
$vehicle->driver()->associate($driver);
$vehicle->save();

您的模型应如下所示

class Driver extends Model
{
    public function vehicle()
    {
        return $this->belongsTo(Vehicle::class);
    }
}

class Vehicle extends Model
{
    protected $primaryKey = 'vehicle_number';
    public $incrementing = false;

    public function driver()
    {
        return $this->hasOne(Driver::class);
    }
}

尝试一下,让我知道它是否对你有帮助