21

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

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

我不明白那将如何工作。

4

7 回答 7

25

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

因此,您的列声明应如下所示:

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

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

于 2016-11-19T15:53:47.367 回答
18

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

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

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

于 2019-05-07T03:15:12.463 回答
13

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

  createdAt: {
                field: 'created_at',
                type: DataTypes.DATE,
                allowNull: false,
                defaultValue: DataTypes.NOW
            }
于 2020-02-25T14:47:18.253 回答
4

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

createdAt: {
   field: 'created_at',
   type: DataTypes.DATE,
   allowNull: false,
   defaultValue: literal('CURRENT_TIMESTAMP'),
}
于 2021-05-25T16:14:53.357 回答
2

使用“literal”,见下文。

updated_at: {
  allowNull: false,
  type: Sequelize.DATE, 
  defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
}
于 2021-11-24T07:52:53.320 回答
1

我不得不使用

createdAt: {
    type: DataTypes.DATE,
    defaultValue: Sequelize.fn('getdate')
},
于 2020-11-19T06:34:46.550 回答
-1

只有这对我有用。

createdAt: {
   field: 'created_at',
   type: DataTypes.DATE,
   allowNull: false,
   defaultValue: Sequelize.fn.('NOW')
}
于 2021-03-23T12:25:43.267 回答