我很难理解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
字段不会设置为当前时间戳?
答案 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;