在 Sequelize 迁移中将 defaultValue 设置为今天的日期
Posted
技术标签:
【中文标题】在 Sequelize 迁移中将 defaultValue 设置为今天的日期【英文标题】:Set defaultValue to todays date in a Sequelize migration 【发布时间】:2017-04-03 08:15:22 【问题描述】:我正在使用带有 Sequelize 的 Node Express,我想将数据库中“日期”列的默认值设置为今天的日期。我尝试了以下迁移,但没有成功,因为它将默认日期设置为与我运行迁移时相同的日期。我希望将其设置为与创建行时相同的日期。
module.exports =
up: function (queryInterface, Sequelize)
return queryInterface.addColumn(
'Todos',
'date',
type: Sequelize.DATEONLY,
allowNull: false,
defaultValue: new Date()
)
,
我不明白那是如何工作的。
【问题讨论】:
【参考方案1】:您需要使用 mysql 函数 NOW()
作为默认值。
所以你的列声明应该是这样的:
type: Sequelize.DATEONLY,
allowNull: false,
defaultValue: Sequelize.NOW
请记住,这不会填充迁移中的字段。它们将是空的,因为它们不是用 sequelize 创建的。
【讨论】:
【参考方案2】: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
【讨论】:
我还需要在 v5 上使用Sequelize.fn('now')
。
我必须使用Sequelize.fn('NOW')
(大写的“now”)【参考方案3】:
https://github.com/sequelize/sequelize/issues/645#issuecomment-18461231
createdAt:
field: 'created_at',
type: DataTypes.DATE,
allowNull: false,
defaultValue: DataTypes.NOW
【讨论】:
【参考方案4】:SQL Server 用户必须使用literal('CURRENT_TIMESTAMP')
createdAt:
field: 'created_at',
type: DataTypes.DATE,
allowNull: false,
defaultValue: literal('CURRENT_TIMESTAMP'),
【讨论】:
错误:未定义文字:这对我不起作用。【参考方案5】:使用“literal”,见下文。
updated_at:
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP')
【讨论】:
【参考方案6】:我不得不使用
createdAt:
type: DataTypes.DATE,
defaultValue: Sequelize.fn('getdate')
,
【讨论】:
【参考方案7】:只有这对我有用。
createdAt:
field: 'created_at',
type: DataTypes.DATE,
allowNull: false,
defaultValue: Sequelize.fn.('NOW')
【讨论】:
你能不能把 json 放到一个代码块中,这样更容易阅读并解释一下为什么这对你有用以上是关于在 Sequelize 迁移中将 defaultValue 设置为今天的日期的主要内容,如果未能解决你的问题,请参考以下文章