商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > ThinkPHP 数据库配置文件时间字段自动写入【省事】

ThinkPHP 数据库配置文件时间字段自动写入【省事】

  发布于2026-07-14 阅读(0)

扫一扫,手机访问

想让 ThinkPHP 自动帮你写好 create_timeupdate_time?直接改数据库配置文件确实是最省事的方式——但前提是,你得把配对、匹配、不遗漏这三件事做全,否则“省事”就变成“查半天”。

一、database.php 里只改这一项

打开 config/database.php,找到 'auto_timestamp' 这一行,配置其实很简单:

  • 设为 true:自动写入整型时间戳(int 类型字段)
  • 设为 'datetime':自动写入 Y-m-d H:i:s 格式字符串(对应 DATETIMETIMESTAMP 字段)
  • 设为 false 或删掉该配置:全局关闭,模型级配置才起作用

这里有个坑需要注意:'auto_timestamp' => 'datetime' 必须搭配数据库字段类型为 DATETIMETIMESTAMP;如果你字段是 INT 却配成 'datetime',写入就会失败,或者存成空值,查半天都查不出原因。

二、字段名和类型必须提前对齐

全局配置不认自定义字段名,默认只处理 create_timeupdate_time。所以,数据库表里必须真实存在这两个字段,名字大小写、下划线一个都不能错。字段类型要和 auto_timestamp 值一致:

  • true → 字段类型为 INT
  • 'datetime' → 字段类型为 DATETIMETIMESTAMP

另外,字段允许为 NULL,或设默认值(如 CURRENT_TIMESTAMP),避免严格模式下插入报错。这些小细节,一个都不能漏。

三、用对方法,不然白配

自动写入这个小家伙,只认模型操作,不认 Db 类:

  • ✅ 正确:$user = new User(); $user->name = 'xxx'; $user->sa ve();
  • ❌ 无效:Db::name('user')->insert(['name' => 'xxx']); —— 完全绕过模型,时间字段不会自动填

如果你用了 allowField(),记得时间字段得在白名单里,否则会被过滤掉。这个细节很容易被忽略,但偏偏是新手最容易踩的坑。

四、不想全局开?那就关掉它

当然,如果你不想全局开启,或者部分表没有时间字段,建议:

  • database.php 中的 'auto_timestamp' 设为 false 或注释掉
  • 只在具体模型里启用:protected $autoWriteTimestamp = true;,再配字段名
  • 这样更安全,避免新增表漏建时间字段导致插入失败

话说回来,这种方式虽然多了一步配置,但灵活性和可控性都更强,适合项目规模较大的场景。

本文转载于:https://www.php.cn/faq/2819455.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注