我正在使用带有Sequelize的Node Express,我想为列设置defaultValue" date"在数据库中到今天的日期。我尝试了以下迁移,但它没有工作,因为它将默认日期设置为与我运行迁移时相同的日期。我希望将其设置为创建行时的相同日期。
module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.addColumn(
'Todos',
'date',
{
type: Sequelize.DATEONLY,
allowNull: false,
defaultValue: new Date()
}
)
},
我无法理解这是如何运作的。
答案 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')
}
答案 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"