下面是我在 Hooks 中使用的代码,用于更新两个对象的
updatedAt
列:
hooks: {
afterUpdate: (group, options, callback) => {
console.log("groudId " + groupId + " options " + options)
},
afterCreate: (member, options, callback) => {
return new Promise((resolve, reject) => {
sequelize.models.Group.findOne({
where: {
id: member.group_id
}
}).then((group) => {
if (group) {
var date = new Date();
console.log("BEFORE group.updatedAt " + group.updatedAt)
group.dataValues.updatedAt = new Date()
console.log("CHANGED group.updatedAt " + group.updatedAt)
group.save().then((Group) => {
if (Group) {
console.log("UPDATED Group.updatedAt " + Group.updatedAt)
console.log("UPDATED group.updatedAt " + group.updatedAt)
resolve(Group)
} else {
console.log("NO GROUP Found")
return reject(group.id)
}
}).catch((error) => {
return (error)
})
} else {
return reject(id)
}
}).catch((error) => {
return (reject)
})
})
}
控制台日志:
BEFORE group.updatedAt Fri Feb 17 2017 17:36:00 GMT-0800 (PST)
CHANGED group.updatedAt Tue Feb 28 2017 14:00:17 GMT-0800 (PST)
UPDATED Group.updatedAt Tue Feb 28 2017 14:00:17 GMT-0800 (PST)
UPDATED group.updatedAt Tue Feb 28 2017 14:00:17 GMT-0800 (PST)
BEFORE group.updatedAt Fri Feb 17 2017 17:36:00 GMT-0800 (PST)
CHANGED group.updatedAt Tue Feb 28 2017 14:00:19 GMT-0800 (PST)
UPDATED Group.updatedAt Tue Feb 28 2017 14:00:19 GMT-0800 (PST)
UPDATED group.updatedAt Tue Feb 28 2017 14:00:19 GMT-0800 (PST)
虽然我认为日志看起来是正确的,但为什么数据库中的实际对象没有更新为新的
updatedAt
值? 或者是否有一种更简单的方法来更新对象updatedAt
列?
这对我有用
group.changed('updatedAt', true)
await group.update({
updatedAt: new Date()
})
仅使用 updateAt = new Date 调用更新是不够的,您必须将列标记为已更改
以下内容适用于:
group.changed('updatedAt', true)
这会将
updatedAt
列标记为脏,以便对其进行更新。
以上方法都不适合我,所以我不得不使用模型方法:
await MyModel.update({ updatedAt }, { where: { id: instance.id }, silent: true });
工作了
var query = sequelize.getQueryInterface().queryGenerator.updateQuery(
'YOUR_TABLE',
{ updated_at: sequelize.literal('CURRENT_TIMESTAMP') },
{ id: 1 },
{ returning: false },
);
sequelize.query(query);
根据文档,您可以通过调用
instance.set(key, value, [options])
来更新实例值,因此,在您的情况下,它应该是:
console.log("BEFORE group.updatedAt " + group.updatedAt)
group.set('updatedAt', new Date())
console.log("CHANGED group.updatedAt " + group.updatedAt)
group.save().then((Group) => { /* the other part of your code*/ })
我能够使用 .changed() 方法更新模型实例上的 UpdatedAt 属性。仅当您将两个属性实例设置为changed = true时,这才有效
group.changed('updatedAt', true)
group.changed('exampleProperty', true)
await group.save({ silent: false })
唯一对我有用的东西:
await sequelize.query("UPDATE groups SET updatedAt = :date WHERE id = :id", {
replacements: { date: new Date(2012, 7, 22, 2, 30, 0, 0), id: group.id },
});
我对 Alexander Zinchuk 的代码做了一些小改动,它对我有用:
await MyModel.update({ updatedAt: new Date() }, { where: { id: instance.id }})