关于数据生成插入数据库时报时间格式错误的解决方法之一
php.ini配置里默认时区采用的是UTC时间,我们在生成假数据的时候直接获取的时间都是UTC格式(以Z结尾),但咱数据库不支持这个格式的时间,所以在插入前小小地修改下时间格式就可以啦,至于改时区什么的我就没有去试过了,有大神试过的可以分享一下,继续学习。
数据生成工厂不用改,在UserSeeder里对时间数据进行格式化就好了,如下
// 前略
public function run()
{
// 生成数据
$users = factory(User::class)->times(50)->make();
// 对数据字典数组遍历格式化每一项的时间属性
$data = array_map(function($u){
$u['email_verified_at'] = date('Y-m-d H:i:s', strtotime($u['email_verified_at']));
$u['created_at'] = date('Y-m-d H:i:s', strtotime($u['created_at']));
$u['updated_at'] = date('Y-m-d H:i:s', strtotime($u['updated_at']));
return $u;
}, $users->makeVisible(['password','remeber_token'])->toArray() ); // 这个toArray把User对象数组转化成字典数组,可以在tinker里自己试试就知道输出是啥样了
// 这里再插入数据库
User::insert($data);
// 后略
}
推荐文章: