laravel 7 开始, 以新的日期序列化格式日期。如
2020-03-04T20:01:00.283041Z
这对我们很不友好。得想办法处理。
按照官方的意思,在 model 中,增加下边的函数:
protected function serializeDate(DateTimeInterface $date)
{
return $date->format($this->dateFormat ?: 'Y-m-d H:i:s');
}
一种方式是,写一个父类,父类中写入该方法。但是,继承并不是一个很好的实现方式。这里,我们使用 trait 来解决。
一波操作
mkdir app/Traits
vim app/Traits/SerializeDate
# 写入下边的代码
<?php
namespace App\Traits;
use DateTimeInterface;
trait SerializeDate
{
protected function serializeDate(DateTimeInterface $date)
{
return $date->format($this->dateFormat ?: 'Y-m-d H:i:s');
}
}
然后在 model 中使用它,这里以 User 为例:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use App\Traits\SerializeDate;
class User extends Authenticatable
{
use Notifiable;
use SerializeDate;
protected $fillable = [
'account', 'password', 'nickname', 'phone', 'email', 'gender',
'verification_token', 'email_verified_at'
];
protected $hidden = [
'password', 'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
'created_at' => 'datetime',
'updated_at' => 'datetime'
];
}
use 它就好
如果有 10 个 model 需要这样处理时间,是不是要 use 10 次啊,好像也不怎么好啊。看着办吧,主要就是 serializeDate 这个方法。