Laravel 不更新列的空值

Laravel not updating null values to column

迁移

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设置为日期类型的列并且可以为空

当运行插入函数时,如下所示插入空值

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

当更新与 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);

在Table中,如下所示

如何让它像更新中的插入函数一样为空? 我的严格模式现在是 false,如果我把它设为 true,它会抛出 end_date 列无效数据的异常。

您有 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 数据库中的结束日期字段

中设置默认值

尝试替换

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

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

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

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

第三名:

$model->field = null;