You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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生成的迁移文件:

  1. 找到src/database/migrations/目录下对应创建目标表的迁移文件
  2. 修改日期字段的定义,添加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');
  },
};
  1. 运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:55:20