如何在Strapi中为日期字段设置CURRENT_TIMESTAMP默认值?
在Strapi v3/v4中设置日期字段默认值为CURRENT_TIMESTAMP的方法
Strapi后台UI确实没有直接提供设置日期字段默认值为CURRENT_TIMESTAMP的选项,但不管是v3还是v4版本,都有可行的实现方式,分两种场景给出方案:
Strapi v4 实现方式
方案1:使用生命周期钩子(推荐,符合Strapi规范)
通过模型的生命周期钩子在数据创建前自动填充当前时间,效果和数据库默认值一致,还能兼容不同数据库。
在对应内容类型的生命周期文件(路径:src/api/[你的内容类型]/content-types/[你的内容类型]/lifecycles.js)中添加以下代码:
module.exports = { async beforeCreate(event) { const { data } = event.params; // 仅当字段未被前端传入值时,设置为当前时间 if (!data.your_date_field) { data.your_date_field = new Date(); } }, };
如果需要在数据更新时也自动更新该字段,可以额外添加beforeUpdate钩子。
方案2:直接修改数据库迁移文件(数据库层面生效)
如果你需要在数据库级别设置默认值,可以修改Strapi生成的迁移文件:
- 找到
src/database/migrations/目录下对应创建目标表的迁移文件 - 修改日期字段的定义,添加
default: 'CURRENT_TIMESTAMP':
module.exports = { async up(queryRunner) { await queryRunner.createTable('your_table_name', { // 其他字段定义... your_date_field: { type: 'datetime', default: 'CURRENT_TIMESTAMP', nullable: true, }, }); }, async down(queryRunner) { await queryRunner.dropTable('your_table_name'); }, };
- 运行
npm run strapi migrate应用变更
注意:后续如果通过Strapi CLI修改模型,可能会覆盖迁移文件的自定义内容,需要重新调整。
Strapi v3 实现方式
方案1:生命周期钩子
在模型文件(路径:models/[你的内容类型].js)中添加生命周期钩子:
module.exports = { lifecycles: { beforeCreate(data) { if (!data.your_date_field) { data.your_date_field = new Date(); } }, }, };
方案2:手动修改数据库表结构
v3的模型JSON配置无法直接定义数据库默认值,你可以直接登录MySQL,执行SQL语句给目标字段添加默认值:
ALTER TABLE your_table_name MODIFY COLUMN your_date_field DATETIME DEFAULT CURRENT_TIMESTAMP;
内容的提问来源于stack exchange,提问作者Drashti Kheni
相关产品推荐
相关产品推荐

