今天测试封装代码,使用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
]