Php 当DB设置为“->;时,Laravel插入“0000-00-00”而不是null;nullable()`和`->;默认值(空)`

Php 当DB设置为“->;时,Laravel插入“0000-00-00”而不是null;nullable()`和`->;默认值(空)`,php,date,laravel-5,nullable,homestead,Php,Date,Laravel 5,Nullable,Homestead,我在Homestead Vagrant box上使用Laravel 5.1,在Ubuntu18.04和MySql 5.7.25上使用PHP7.2.14 我已使用以下内容创建了一个迁移: $table->date('expiry_date')->nullable()->default(null); 我有一个表单,其日期字段名为expiration\u date,默认设置为null: {!! Form::date('expiry_date', null, array('class

我在Homestead Vagrant box上使用Laravel 5.1,在Ubuntu18.04和MySql 5.7.25上使用PHP7.2.14

我已使用以下内容创建了一个迁移:

$table->date('expiry_date')->nullable()->default(null);
我有一个表单,其日期字段名为
expiration\u date
,默认设置为null:

{!! Form::date('expiry_date', null, array('class' => 'form-control')) !!}
当我在字段中输入日期时,一切正常,但当我将其留空时,它会将
0000-00-00
插入数据库,这会扰乱我视图中的显示。我唯一能够修复它的方法是将以下内容添加到模型中:

public function setExpiryDateAttribute($value)
{
    $this->attributes['expiry_date'] = $value ?: null;
}
我很恼火,我不得不多做这一步,而且感觉不太“拉威尔”,这让我觉得我错过了什么

有趣的是,它在我的自定义请求中通过了验证:

'expiry_date' => 'date',
编辑:


我在模型中设置了
protected$dates['expiration\u date']
,并将其添加到批量分配中。

据我所知,您不能将时间设为空。它的默认值是0000-00-00:00。html5的
input type=“date”
默认值可能是
0000-00-00
如果为空。。。所以技术上它不是空的。看,谢谢@O-9,我会试试看,然后再打给你。据我所知,你不能取消时间。它的默认值是0000-00-00:00。html5的
input type=“date”
默认值可能是
0000-00-00
如果为空。。。所以技术上它不是空的。看,谢谢@O-9,我试试看,然后再打给你