今天测试封装代码,使用laravel model获取数据内容的时候,突然发现时间不对

 0 => array:6 ["id" => 2
    "name" => "JS"
    "remarks" => "测试数据"
    "created_at" => "2020-09-10T06:15:28.000000Z"
    "updated_at" => "2020-09-10T06:15:28.000000Z"
    "deleted_at" => null
 ]

起初我以为是时区的问题,后来我发现并不是,后来查阅资料才发现,laravel7新版本将数据里的时间转换了,解决方式如下:
第一步:找到vendor\laravel\framework\src\Illuminate\Databases\Eloquent\Concerns\HasAttributes.php
第二步:在HasAttributes.php中设置变量

/**
 * 是否开启自定义时间
 * 
 * @var bool
 */
 protected $whenTime = true;

第三步:在HasAttributes.php中找到serializeDate()方法并重写,代码如下:

	/**
     * Prepare a date for array / JSON serialization.
     *
     * @param  \DateTimeInterface  $date
     * @return string
     */
    protected function serializeDate(DateTimeInterface $date)
    {
        return (bool)$this->whenTime ? $date->format('Y-m-d H:i:s') : Carbon::instance($date)->toJSON();
    }

最后在自己的数据模型里设置$whenTime属性

	/**
    * 是否开启自定义时间
    * 
    * @var bool
    */
   protected $whenTime = false;

效果:

 0 => array:6 ["id" => 2
    "name" => "JS"
    "remarks" => "测试数据"
    "created_at" => "2020-09-10 14:15:28"
    "updated_at" => "2020-09-10 14:15:28"
    "deleted_at" => null
 ]
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐