在laravel中将日期设置为可为空

时间:2018-02-22 10:45:34

标签: php laravel eloquent

我很难理解laravel中日期字段的内部工作原理。我有一个名为called_at的自定义日期字段,我在架构中将其设置为可为空。由于它是一个日期字段I would naturally want it to be a Carbon instance,所以在模型中我将此属性推送到$dates数组。

protected $dates = ['called_at'];

为了能够通过request('called_at')输入从控制器设置它,我必须在模型中设置一个mutator。所以我设置了这样一个:

public function setCalledAtAttribute($date){
    $this->attributes['called_at'] = Carbon::parse($date);
}

但问题是,即使用户未在输入字段中提供日期,called_at属性也会设置为当前时间戳!但我希望它是NULL。

为了摆脱它,我评论了setCalledAtAttribute变异器。但现在它甚至不会接受输入:

  

InvalidArgumentException缺少数据

最重要的是,如何将我的日期字段设置为可空,以便当用户将输入字段留空时,called_at字段不会设置为当前时间戳?

2 个答案:

答案 0 :(得分:2)

尝试这样做:

public function setCalledAtAttribute($date)
{
    $this->attributes['called_at'] = empty($date) ? null : Carbon::parse($date);
}

答案 1 :(得分:1)

如果您对空字符串Carbon::parse('')或null Carbon::parse(null)使用解析,那么Carbon实际上return当前日期和时间因此您应该检查是否提供了$ date而不是null:< / p>

$this->attributes['called_at'] = $date ? Carbon::parse($date); : null;