fastadmin自动写入时间戳坑点
fastadmin自动写入时间戳坑点
数据库中时间使用的是datetime
类型,在fastadmin使用thinkPHP5自动写入时间字段值报错,SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '1649901669' for column 'createtime' at row 1
1、坑点1
通过将database.php
配置为datetime
仍然不行。
1 | // 自动写入时间戳字段 |
这里避坑,通过将auto_timestamp
设置为datetime
后,注释说时间字段取出后的默认时间格式,默认为Y-m-d H:i:s
,但是仍然需要指定为'datetime_format' => Y-m-d H:i:s
,否则将无法正确写入。
1 | // 时间字段取出后的默认时间格式,默认为Y-m-d H:i:s |
2、坑点2
在fastadmin
中一键生成CRUD
,自动在模型前面加了一段代码。将时间戳类型设置为了int
,这里的优先级高于database.php
中配置的自动写入时间戳,所以实际配置还是int
,这样就导致了无法插入了。我们可以把$autoWriteTimestamp='int'
删掉。让database.php
中的配置生效。
1 | // 自动写入时间戳字段 |
3、坑点3
如果在坑点2中没有删掉,而是把protected $autoWriteTimestamp = 'int';
改为了protected $autoWriteTimestamp = 'datatime';
,会发现仍然不行,最后发现还是需要设置$dateFormat
才能正常,如下:
1 | // 自动写入时间戳字段 |
上面代码等效,且$type
优先级高于上面两行代码,即如果配置了$type
,则上面两行配置不会生效。
1 | // 字段类型或者格式转换 |