模型工厂填充返回的 created_at 按照教程填入时间,允许数据填充报插入的时间格式错误

Laravel版本:7.12.0
问题:
按照教程的做法在数组传入$facker创建的时间, 运行 php artisan db:seed , Laravel 报插入失败. 通过比较发现是插入的时间被转换了. 让我觉得奇怪的是, email_verified_at 与 created_at 是相同的数据类型, email_verified_at 是没有被转换的.
之后我尝试 created_at 与 email_verified_at 传一样的值, 结果还是 created_at 被转换带时区的时间,而 email_verified_at不受影响. 希望有人帮忙指点一下, 一直纠结在这里.

表结构

模型工厂填充返回的created_at按照教程填入时间,允许数据填充报插入的时间格式错误

模型代码

模型工厂填充返回的created_at按照教程填入时间,允许数据填充报插入的时间格式错误

输出结果

模型工厂填充返回的created_at按照教程填入时间,允许数据填充报插入的时间格式错误

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

感谢@zengsp 的指点,参考自Laravel7/升级说明
补充说明一下解决方案

产生原因:Laravel 7 对日期序列化改动

file
解决方案: 在工厂模型对应的Model,重写serializeDate方法
file

需要具有复用性的话,可以创建性状( trait ),在性状实现截图的方法,需要修改的 Model use 即可。

希望对后面学习的人有帮助

3年前 评论
讨论数量: 3

教程是 6.x 的,7.x 有变更,升级说明

3年前 评论

感谢@zengsp 的指点,参考自Laravel7/升级说明
补充说明一下解决方案

产生原因:Laravel 7 对日期序列化改动

file
解决方案: 在工厂模型对应的Model,重写serializeDate方法
file

需要具有复用性的话,可以创建性状( trait ),在性状实现截图的方法,需要修改的 Model use 即可。

希望对后面学习的人有帮助

3年前 评论

全局搜索 serializeDate 替换为 protected function serializeDate(DateTimeInterface $date) { return $date->format($this->dateFormat ?: 'Y-m-d H:i:s'); }

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!