thinkphp模型自动填充时间戳需配置$autowritetimestamp、$createtime、$updatetime等属性,并根据字段类型设置$type和$readonly。

如果您在使用 ThinkPHP 模型进行数据写入时,希望创建时间与更新时间字段能自动填充而无需手动赋值,则需正确配置模型的时间戳行为。以下是实现该功能的具体方法:
一、启用模型自动写入时间戳
此方法通过开启模型级自动时间戳开关,使框架在 save()、create() 等模型方法调用时自动注入时间值。必须确保数据库字段存在且类型兼容。
1、在模型类中声明自动写入开关:protected $autoWriteTimestamp = true;
2、确认数据库对应字段名为 create_time 和 update_time(或按需自定义)
3、若字段类型为 DATETIME 或 TIMESTAMP,推荐将开关设为字符串形式以匹配格式:protected $autoWriteTimestamp = 'datetime';
二、自定义时间戳字段名称
当数据库字段命名不符合默认约定(如使用 created_at、updated_at 或 add_time、edit_time)时,必须显式指定映射关系,否则框架无法识别并跳过写入。
1、在模型类中设置创建时间字段名:protected $createTime = 'created_at';
2、在模型类中设置更新时间字段名:protected $updateTime = 'updated_at';
3、若仅需记录创建时间而不更新修改时间,可禁用更新字段:protected $updateTime = false;
三、配置只读字段防止误覆盖
createTime 字段应在更新操作中保持不变,否则可能被意外重写。通过设置只读属性可强制框架忽略对该字段的更新意图。
1、在模型类中声明只读字段列表:protected $readonly = ['create_time'];
2、如同时存在多个不可变更字段(如 status、version),可一并加入数组:protected $readonly = ['create_time', 'status', 'version'];
3、动态设置只读字段亦可在操作时生效:$model->readonly(['create_time'])->save();
四、处理非标准时间字段类型
若数据库字段为 INT 类型存储时间戳,需额外声明类型转换规则,否则自动写入会因类型不匹配而静默失败。
1、在模型类中配置字段类型:protected $type = ['create_time' => 'integer', 'update_time' => 'integer'];
2、确保字段默认值或数据库约束允许 NULL 或 0,避免因空值导致 SQL 错误
3、若使用自定义时间格式(如 Y-m-d),需配合 dateFormat 配置:protected $dateFormat = 'Y-m-d';
五、关闭自动写入时间戳
当表结构不含时间字段或业务明确禁止自动注入时,必须彻底关闭相关配置,否则仍可能触发空值写入或 SQL 报错。
1、在模型类中清除时间字段声明:protected $createTime = false;
2、在模型类中清除更新字段声明:protected $updateTime = false;
3、在模型类中关闭自动写入行为:protected $autoWriteTimestamp = false;
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











