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

And*_*eas 3 node.js express sequelize.js sequelize-cli

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

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

我不明白那将如何工作。

asu*_*aaa 11

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

{
  type: Sequelize.DATEONLY,
  allowNull: false,
  defaultValue: Sequelize.fn('now')
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我必须使用 `Sequelize.fn('NOW')` (“now”大写) (2认同)

Sha*_*ian 10

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

  createdAt: {
                field: 'created_at',
                type: DataTypes.DATE,
                allowNull: false,
                defaultValue: DataTypes.NOW
            }
Run Code Online (Sandbox Code Playgroud)


dri*_*hev 8

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

因此,您的列声明应类似于:

{ 
   type: Sequelize.DATEONLY,
   allowNull: false,
   defaultValue: Sequelize.NOW
}
Run Code Online (Sandbox Code Playgroud)

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

  • 不适合我(2022-03-09),必须使用 `Sequelize.fn('now')` (3认同)

小智 5

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

createdAt: {
   field: 'created_at',
   type: DataTypes.DATE,
   allowNull: false,
   defaultValue: literal('CURRENT_TIMESTAMP'),
}
Run Code Online (Sandbox Code Playgroud)