首页 > 解决方案 > createdAt、updatedAt 和 deletedAt 字段中的 unix 时间戳

问题描述

我在我的 ExpressJS 应用程序中使用 SequlizeJS ORM 与 MariaDB 进行通信。我正在使用现有的数据库方案,因此无法更改字段的数据类型。现有数据库在 createdAt、updatedAt 和 deletedAt 字段中使用 unix 时间戳。现在我也需要为新的 ExpressJS 应用程序遵循这一点。

在每个模式中,我使用以下 Sequelize 挂钩将 createdAt 和 updatedAt 字段转换为 unix 时间戳。

hooks: {
    beforeCreate: (instance, options) => {
        instance.dataValues.createdAt = Math.floor(Date.now() / 1000);
        instance.dataValues.updatedAt = Math.floor(Date.now() / 1000);
    },
    beforeUpdate: (instance, options) => {
        instance.dataValues.updatedAt = Math.floor(Date.now() / 1000);
    }
}

但问题是我不能将 deletedAt 设置为 beforeBulkDestroy 钩子上的时间戳。谁能帮我解决这个问题?

谢谢 !

标签: javascriptnode.jsexpresssequelize.js

解决方案


要尝试的一件事 - individualHooks 选项为每个实例调用 beforeDestroy() 钩子。这可以在查询级别应用:

 db.myFunkyModel.destroy({
    where: { 
       'field' : { [Op.like]: '%someValue%' }
    },
    individualHooks : true
  });

或者在更广泛的层面上:

 const sequelizeDb = new Sequelize(
    ...      
    {
      host: '127.0.0.1',
      ....
      define: {
        ....
        individualHooks : true
      }
      ....
    });

查看手册的 Model Hooks 部分,了解单个Hooks 的潜在性能影响。


推荐阅读