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

时间:2016-11-19 15:37:31

标签: node.js express sequelize.js sequelize-cli

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

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

我无法理解这是如何运作的。

6 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

我不得不使用

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

答案 5 :(得分:-1)

只有这个对我有用。

vowels = %w[a e i o u]
sentence = 'chat'
splitted = sentence.chars
right_part = []

sentence.each_char do |letter|
  vowels.include?(letter) ? break : right_part << splitted.shift
end

new_sentence = (splitted + right_part).join

p new_sentence # => "atch"