避免 created_at 和 updated_at 由 sequelize 自动生成

Posted

技术标签:

【中文标题】避免 created_at 和 updated_at 由 sequelize 自动生成【英文标题】:Avoid created_at and updated_at being auto generated by sequelize 【发布时间】:2016-08-22 17:39:18 【问题描述】:

如何定义一个为其提供 created_at 和 updated_at 而不是生成的模型?

我正在从已经有 created_atupdated_at 字段数据的地方导入数据,我想保留这些数据,而不是在通过 sequelize(我们的辅助存储)创建/更新对象时生成。

我已经尝试了模型定义和选项的所有可能排列以使其正常工作,并且仍然用它自己的时间戳覆盖我的字段:silent: true 等...

需要明确的是,输入数据已createAt 和updatedAt,我想使用sequelize 的bulkCreate() 等,这样提供的输入值将作为created_at 和updated_at 使用并存储在模型上,而不是由sequelize 生成。

这是我当前的模型定义:

const Lead = sequelize.define('lead', 
  objectId: 
    type: Sequelize.STRING,
    field: 'objectId',
    primaryKey: true,
    allowNull: false
  ,
  firstName: 
    type: Sequelize.STRING,
    field: 'first_name'
  ,
  lastName: 
    type: Sequelize.STRING,
    field: 'last_name'
  ,
  phoneNumber: 
    type: Sequelize.STRING,
    field: 'phone_number'
  ,
  createdAt: 
    type: Sequelize.DATE,
    field: 'created_at',
  ,
  updatedAt: 
    type: Sequelize.DATE,
    field: 'updated_at'
  
, 
  freezeTableName: true, // Model tableName will be the same as the model name
  timestamps: false,
  underscored: true
);

【问题讨论】:

【参考方案1】:

选项是

timestamps: false,

timestamps 写成全小写

更新:

通过查看bulkCreate() 函数的代码,it looks that it always updates the timestamps,因此,如果没有补丁,现在是不可能的

【讨论】:

好的,谢谢,我也试过了,但还是不行,我会在问题中更改我的模型定义以反映这一点。所有导入的行仍然具有完全相同的 createdAt 和 updatedAt(插入时间),而不是使用提供的 createdAt 和 updatedAt。 看来我得提交补丁了,好吧,你知道维护者是否很活跃吗? 最后一次提交是一天前的,所以它们看起来很活跃。

以上是关于避免 created_at 和 updated_at 由 sequelize 自动生成的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中 created_at 和 updated_at 列的优点是啥

将 created_at 和 updated_at 字段添加到猫鼬模式

将 created_at 和 updated_at 字段添加到猫鼬模式

Laravel 合并 created_at 和 updated_at 时间戳

在 Doctrine 中为 updated_at、created_at 自动取值

关于数据库创建时间和更新时间的字段名 created_at updated_at