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

Tan*_*may 5 php laravel eloquent

我很难理解 laravel 中日期字段的内部工作原理。我有一个名为的自定义日期字段called_at,我在架构中将其设置为可为空。由于它是一个日期字段,我自然希望它是一个 Carbon 实例,因此在模型中我将此属性推送到$dates数组。

protected $dates = ['called_at'];
Run Code Online (Sandbox Code Playgroud)

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

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

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

为了摆脱它,我注释掉了setCalledAtAttributemutator。但现在它甚至不会接受输入:

InvalidArgumentException 数据丢失

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

Ale*_*nin 7

尝试这样做:

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

  • @Eisenheim 请注意,每当创建或更新记录时,时间戳字段都会自动更新。如果您不希望出现此行为,请将其更改为日期时间字段。 (2认同)