Write the Code. Change the World.

8月 13

laravel 7 开始, 以新的日期序列化格式日期。如 2020-03-04T20:01:00.283041Z 这对我们很不友好。得想办法处理。

laravel 7 升级指南

按照官方的意思,在 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 这个方法。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注