Laravel 在保存到数据库之前转换日期格式

Laravel converting date format before saving in database

我正在使用 Laravel 突变器,这是我的日期格式在视图中的显示方式,

20/03/04

我想将其转换为

20-03-04

保存前的格式, 为了在一个专栏上做到这一点,我尝试在我的模型中使用以下代码,

public function setdobAttribute($input)
{
  $d= date_create_from_format('d/m/Y',$input);
    $this->attributes['dob'] = $d->format('Y-m-d');
}

它在一列上工作正常,但我想在多列上应用相同的功能,我该如何实现,我也试过了;

protected $casts = [
    'dob'  => 'date:Y-m-d',
    'work_date' => 'datetime:Y-m-d H:00',
];

但它不起作用。 错误:发现意外数据。发现意外数据。数据缺失

public function setDateAttribute( $value ) {
  $this->attributes['date'] = (new Carbon($value))->format('d/m/y');
}

setDateAttribute 始终采用 set[ColumnName]Attribute 格式,使用 CamelCase。 $this->attributes['date'] 部分中的日期还必须与 table.

中的实际列名匹配

当您在数据库中创建或更新记录时,上面的函数会自动更改格式。

注意:您可能需要在模型顶部添加 use Carbon\Carbon 语句才能使用 Carbon 库。

在这里查看其他示例。

更新

您可以选择使用以下方式为 date 列定义格式:

protected $dateFormat = 'Y-m-d';

我猜你可以覆盖 setAttribute 方法,例如:

public function setAttribute($key, $value){
    if(in_array($key, 'abstract_keys')){
        $this->attributes[$key] = !!$value;
    }
    else{
        parent::setAttribute($key, $value);
    }
}

getAttribute也是如此。

如果你想把它作为一个函数

function changedateformat($origDate)
{
  $date = str_replace('/', '-', $origDate );
  $newDate = date("d-m-Y", strtotime($date));
  return $newDate;
}

每当您需要转换时,使用 res = changedateformat($data);

调用函数