首先,先来看一下本地环境!
从图中,我们可以看出,主要的:
php/7.3.17
laravel/7.18.0
laravel-admin/1.8.1
这个应该是比较新的后台搭建环境了!
在本地开发测试中,无意发现了,时间显示问题,如图:
纳尼,这是????(一堆问号顿时浮现在我的脑海中)
当时,我的想法是:
1. 数据库中时间存储格式有问题,想法主要基于:
我是用 int 来存储时间的,因为要用laravel-admin作为后台,所以必须要开启时间戳维护
遂在模型里加上了
/**
* 保存 创建时间/修改时间 为 int 格式
*/
public function fromDateTime($value){
return strtotime(parent::fromDateTime($value));
}
2. 和laravel版本有关系,我看了laravel6版本+laravel-admin1.7.9组合的项目,还真没有这个问题...
以下是解决经历:
1. 问问百度,谷歌,Stack Overflow......看看其他博主是怎么解决的
2. 在搜索一通之后,发现关于这个问题的博客或文章还真挺少的,但是还是发现了两篇相关的:
1)首先,这篇文章吸引了我,但是解决方法我并没有采纳,因为有几条回复认为有争议
https://learnku.com/laravel/t/42593
2)又看到了这样一篇文章,说是laravel7更新问题,这和上面文章问题里面的最新回答不谋而合
https://blog.csdn.net/qq_37868757/article/details/107043935
所以,抓住了线索,去看看laravel-china的laravel7文档:
https://learnku.com/docs/laravel/7.x/upgrade/7445#date-serialization
解决方法说去覆写serializeDate方法,并且,下面还提到了:
技巧:该更改仅影响序列化为数组和 JSON 的模型和模型集合,对数据库中的日期没有影响。
纳尼,那就是还是有些许影响喽。
本来我还是想采纳这个做法的,但是,当时脑子灵机一动!!!!
"laravel-admin不是有demo吗,rbac什么的,在那里也有增删改查呀"
遂,去看看,其中角色管理,是不是也报错,这一看,还真是不报错,于是我又新增了一条角色,还是不报错,如图:
顿时,我突然来了兴致,"难道,大牛@z-song解决了这个问题,难道他的model有什么不同吗"
遂,去laravel-admin自带的角色model里看了一下:
文件位置:vendor/encore/laravel-admin/src/Auth/Database/Role.php
部分代码:
大致看了一下,也没有什么不同啊,但是文件开头的引用却引起了我的注意:
use Encore\Admin\Traits\DefaultDatetimeFormat;
难道是多引用了一个 trait 类的问题??
于是我到我的model里去引用了一下,果然,OK\(^o^)/~,真的可以了,如图:
结尾:(这算是站在巨人的肩膀上解决问题吗?O(∩_∩)O哈哈~)