Laravel模型将日期保存为空

vi4fp9gy  于 2023-03-09  发布在  其他
关注(0)|答案(3)|浏览(414)

我有一个名为reserved_at的自定义日期字段,我在schema中将其设置为nullable。由于它是一个日期字段,我自然希望它是一个Carbon示例,所以在模型中我将此属性推送到$dates数组。为了能够通过request('reserved_at')输入从控制器设置它,我必须在模型中设置一个mutator。所以我设置了一个mutator,如下所示:

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

如何将日期字段设置为空,以便当用户将输入字段留空时,reserved_at字段不会设置为当前时间戳?
解决我的问题的代码块

ki1q1bka

ki1q1bka1#

如果我理解得很好,您希望在用户不提供任何日期时将called_at设置为null,对吗?
如果是这种情况,则可以像下面的示例那样执行此操作

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

使用此三元运算符,您将检查$date是否不为空,如果不为空,则called_at将具有$date的值,如果$date为空,则called_at的值也相同

rqqzpn5f

rqqzpn5f2#

对于Laravel 8及更高版本,$dates属性已弃用,您可以只使用$casts键。它会自动处理日期到Carbon示例的转换。

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'called_at' => 'datetime',
];
nwsw7zdq

nwsw7zdq3#

试试这个:

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

相关问题