Laravel不更新空值到列

时间:2018-12-05 11:43:35

标签: laravel eloquent laravel-5.7

迁移

Schema::create('users', function (Blueprint $table) {
        $table->increments('user_id');
        $table->string('username',50)->unique();
        $table->date('start_date');
        $table->date('end_date')->nullable();
        $table->timestamps();
    });

在此处将start_date设置为列类型date并且可以为空

运行如下所示的Insert函数时,将其插入空值

$insert = [
    'username'  =>strtoupper(request('username')),
    'password'  =>Hash::make(request('password')),
    'start_date'  =>date('Y-m-d',strtotime(request('start_date'))),
  ];
  if(request()->filled('end_date')){
    $insert['end_date'] = date('Y-m-d',strtotime(request('end_date')));
  }
  User::create($insert);

enter image description here

更新同一行时,将其保留为end_date输入,

$user = User::GetWithEncrypted(request('user_id'));
$update ['start_date'] = date('Y-m-d',strtotime(request('start_date')));
if(request()->filled('end_date')){
  $update['end_date'] = date('Y-m-d',strtotime(request('end_date')));
}else{
  $update['end_date'] = 'NULL';
}
$user->update($update);

在表中,如下所示 enter image description here

如何像更新中的插入函数一样使它为NULL? 我的严格模式现在为false,如果将其设置为true,它将为end_date列抛出无效数据异常。

3 个答案:

答案 0 :(得分:2)

尝试更换

}else{
  $update['end_date'] = 'NULL';
}

使用

}else{
  $update['end_date'] = null;
}

'NULL'是一个字符串,而null是真正的null。

答案 1 :(得分:0)

您有2个解决此问题的方法:

1。

$user = User::GetWithEncrypted(request('user_id'));
    $update ['start_date'] = date('Y-m-d',strtotime(request('start_date')));
    if(request()->filled('end_date')){
      $update['end_date'] = date('Y-m-d',strtotime(request('end_date')));
    }else{
      $update['end_date'] = '".date('00:00:00')."';
    }
    $user->update($update);

2。 您必须在mysql数据库的结束日期字段中设置默认值

enter image description here

答案 2 :(得分:0)

首先将表格字段设置为 nullable()
第二组表字段DEFAULT to NULL

第三:

$model->field = null;