Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除Laravel中的一对一关系_Php_Laravel_Laravel 5_Laravel 5.2 - Fatal编程技术网

Php 删除Laravel中的一对一关系

Php 删除Laravel中的一对一关系,php,laravel,laravel-5,laravel-5.2,Php,Laravel,Laravel 5,Laravel 5.2,我使用的是Laravel5.2,我创建了一个一对一的关系,如下所示 $driver = Driver::find($driver->id); $vehicle = Vehicle::find($vehicleId); $vehicle->driver()->associate($driver); $vehicle->save(); 这很好用。在某些情况下,我需要通过从车辆上移除特定驾驶员来打破这种关系 $driver = Driver::find($

我使用的是Laravel5.2,我创建了一个一对一的关系,如下所示

 $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();
以下是两个模型

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

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

    public function driver()
    {
        return $this->belongsTo(Driver::class);
    }
}
在我的情况下没有任何效果。谁能给我一个提示,里面出了什么问题。

我想你需要:

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

如果您在车辆和驾驶员之间使用外键,则只需删除子表条目或使引用为Null。驾驶员id是否可为Null。 在迁移过程中,请尝试以下操作:, $table->integer('driver_id')->unsigned()->nullable()->default(null);
希望这能解决您的问题。

首先,我认为您在插入数据时犯了错误

$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);
    }
}

试试看,告诉我它是否对您有帮助

$vehicle->driver()->delete();将删除驱动程序,而不是为两者提供关系代码models@KuKeC添加到问题中。$table->integer('driver_id')->unsigned()->nullable();这就是我在迁移过程中遇到的问题,这是我的错,当我写这个问题的时候。我添加的关系很好。@Shashika我还编辑了你模型中的关系。执行此更新,如果仍有错误,请告诉我此操作不起作用。我需要这样的关系方向。@Shashika,在你的回答中-
$vehicle->driver\u id->NULL。如果是真实情况,则您尝试了错误。如果您从save调用中转储返回值,它是否返回true或false?还有@Shashika,从你的问题来看,你的车型没有id栏,是吗?您似乎已将主键设置为vehicle_number。回答延迟,但这些注释是错误的。这里的内容是正确的,如果driver_id不可填充,也可以。它看起来不起作用的原因是$vehicle已经加载了它的关系模型,并且在重新加载该关系之前,更新原始属性不会改变这一点。尝试$vehicle=$vehicle->fresh();在这之后。