首页> 实战笔录 >PHP开发笔记 >Fastadmin Fastadmin

fastadmin自动写入时间(createtime、updatetime)戳坑点

作者:小萝卜 2023-05-18 浏览 1294

简介数据库中时间使用的是datetime类型,在fastadmin使用thinkPHP5自动写入时间字段值报错,SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '1649901669' for column 'createtime' at row 1

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仍然不行。

// 自动写入时间戳字段 
'auto_timestamp' => 'datetime',

这里避坑,通过将auto_timestamp设置为datetime后,注释说时间字段取出后的默认时间格式,默认为Y-m-d H:i:s,但是仍然需要指定为'datetime_format' => Y-m-d H:i:s,否则将无法正确写入。

// 时间字段取出后的默认时间格式,默认为Y-m-d H:i:s 
'datetime_format' => false,


2、坑点2

在fastadmin中一键生成CRUD,自动在模型前面加了一段代码。将时间戳类型设置为了int,这里的优先级高于database.php中配置的自动写入时间戳,所以实际配置还是int,这样就导致了无法插入了。我们可以把$autoWriteTimestamp='int'删掉。让database.php中的配置生效。

// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'createtime';
protected $updateTime = 'updatetime';
protected $deleteTime = 'deletetime';


3、坑点3

如果在坑点2中没有删掉,而是把protected $autoWriteTimestamp = 'int';改为了protected $autoWriteTimestamp = 'datatime';,会发现仍然不行,最后发现还是需要设置$dateFormat才能正常,如下:

// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 时间字段取出后的默认时间格式
protected $dateFormat = 'Y-m-d H:i:s';

上面代码等效,且$type优先级高于上面两行代码,即如果配置了$type,则上面两行配置不会生效。

// 字段类型或者格式转换
protected $type = [
          'createtime'=>'datetime:Y-m-d H:i:s',
         'updatetime'=>'datetime:Y-m-d H:i:s',
         'deletetime'=>'datetime:Y-m-d H:i:s' 、
​​​​​​​];

 

很赞哦! (2)

文章评论

    高端网站建设