在 Sequelize 迁移中将 defaultValue 设置为今天的日期

Posted

技术标签:

【中文标题】在 Sequelize 迁移中将 defaultValue 设置为今天的日期【英文标题】:Set defaultValue to todays date in a Sequelize migration 【发布时间】:2017-04-03 08:15:22 【问题描述】:

我正在使用带有 Sequelize 的 Node Express,我想将数据库中“日期”列的默认值设置为今天的日期。我尝试了以下迁移,但没有成功,因为它将默认日期设置为与我运行迁移时相同的日期。我希望将其设置为与创建行时相同的日期。

module.exports = 
  up: function (queryInterface, Sequelize) 
    return queryInterface.addColumn(
      'Todos',
      'date',
      
        type: Sequelize.DATEONLY,
        allowNull: false,
        defaultValue: new Date()
      
    )
  ,

我不明白那是如何工作的。

【问题讨论】:

【参考方案1】:

您需要使用 mysql 函数 NOW() 作为默认值。

所以你的列声明应该是这样的:

 
   type: Sequelize.DATEONLY,
   allowNull: false,
   defaultValue: Sequelize.NOW

请记住,这不会填充迁移中的字段。它们将是空的,因为它们不是用 sequelize 创建的。

【讨论】:

【参考方案2】:

Sequelize.NOW 将在未来工作,但某些版本(我试过 4.43.0)似乎不支持它。 我使用 Sequelize.fn('now') 成功设置了 now()


  type: Sequelize.DATEONLY,
  allowNull: false,
  defaultValue: Sequelize.fn('now')

参考:https://github.com/sequelize/sequelize/issues/4679

【讨论】:

我还需要在 v5 上使用 Sequelize.fn('now') 我必须使用Sequelize.fn('NOW')(大写的“now”)【参考方案3】:

https://github.com/sequelize/sequelize/issues/645#issuecomment-18461231

  createdAt: 
                field: 'created_at',
                type: DataTypes.DATE,
                allowNull: false,
                defaultValue: DataTypes.NOW
            

【讨论】:

【参考方案4】:

SQL Server 用户必须使用literal('CURRENT_TIMESTAMP')

createdAt: 
   field: 'created_at',
   type: DataTypes.DATE,
   allowNull: false,
   defaultValue: literal('CURRENT_TIMESTAMP'),

【讨论】:

错误:未定义文字:这对我不起作用。【参考方案5】:

使用“literal”,见下文。

updated_at: 
  allowNull: false,
  type: Sequelize.DATE, 
  defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')

【讨论】:

【参考方案6】:

我不得不使用

createdAt: 
    type: DataTypes.DATE,
    defaultValue: Sequelize.fn('getdate')
,

【讨论】:

【参考方案7】:

只有这对我有用。

createdAt: 
   field: 'created_at',
   type: DataTypes.DATE,
   allowNull: false,
   defaultValue: Sequelize.fn.('NOW')

【讨论】:

你能不能把 json 放到一个代码块中,这样更容易阅读并解释一下为什么这对你有用

以上是关于在 Sequelize 迁移中将 defaultValue 设置为今天的日期的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize - 模型和迁移

在 Elastic Beanstalk 中运行时出现 Sequelize 迁移错误

是否可以在 Sequelize 迁移中定义默认值?

我应该让 Sequelize 模型和迁移保持同步吗?

尝试使用 sequelize 创建迁移时出错

删除 sequelize 迁移中的约束