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

z4bn682m  于 2023-05-28  发布在  Node.js
关注(0)|答案(9)|浏览(208)

我正在使用Node Express和Sequelize,我想将数据库中列“date”的defaultValue设置为今天的日期。我尝试了下面的迁移,但它不起作用,因为它将默认日期设置为与我运行迁移时的日期相同。我希望将其设置为与创建行时相同的日期。

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

我不明白这是怎么回事。

kxe2p93d

kxe2p93d1#

您需要使用MySQL函数NOW()作为默认值。
所以你的列声明应该看起来像这样:

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

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

brgchamk

brgchamk2#

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

46scxncf

46scxncf3#

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

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

uplii1fm4#

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

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

7tofc5zh5#

使用“literal”,见下文。

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

zengzsys6#

2019 -05- 18 2019 -05-18
根据最新的Sequelize Doc(版本v6)

sequelize.define('Foo', {
  bar: {
     type: DataTypes.DATETIME,
     defaultValue: DataTypes.NOW
     // This way, the current date/time will be used to populate this column 
     (at the moment of insertion)
  }
});
p4tfgftt

p4tfgftt7#

我不得不用

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

ulmd4ohb8#

只有这个对我有用。

sale_date: {
  allowNull: false,
  type: Sequelize.DATE,
  defaultValue: Sequelize.fn('now')
},
bxjv4tth

bxjv4tth9#

只有这个对我有用。

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

相关问题