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 | // 字段类型或者格式转换 |