如何在不修改任何属性的情况下更新续集模型的字段'updated_at'

时间:2015-10-07 14:07:42

标签: node.js postgresql timestamp sequelize.js

我正在使用PostgreSQL的sequelize 2.0.0。 我想知道是否可以使用一种方法更新模型的'updated_at'字段。如果是,我该如何实现?

例如,在其他框架中,比如Laravel,你有model.touch()来自动更新模型的'updated_at'。

我已经尝试过使用model.save(),但正如sequelize doc所说,调用这个没有属性的方法什么都不做。此外,在文档中,我没有找到任何允许我做我需要做的事情。

提前感谢您的帮助。

编辑: 举一个我想要实现的例子,我已经有了我的模型实例:  Model.findById(1).then(function(myInstance){ [...] myInstance.update() //here, I didn't change any attributes of myInstance and I would like to update the field udpated_at without doing another query. [...] }): 问题是:如何使用一种方法更新我之前实例的字段updated_at?

2 个答案:

答案 0 :(得分:2)

要更新实例值,您可以使用DOWN

myInstance.set('updatedAt', new Date());
myInstance.save().then(function() {
  // my nice callback stuff
});

如果您没有实例,instance.set(key, value, [options])就有一个做更新查询的好例子:

Post.update({
  updatedAt: null,
}, {
  where: {
    deletedAt: {
      $ne: null
    }
  }
});

答案 1 :(得分:0)

我的解决方案有点hackey。我不得不更新实例上的一个字段,使其与预期的字段不同,以便sequelize认为字段发生了变化,即使它没有变化;并确保之后传递了适当的现场数据。

例如,假设变量myInstance有一个名为title的字段,变量data包含未更改的(或新的)标题({title:"OLD_OR_NEW_TITLE"})。如果我添加到代码myInstance.set('title', data.title+'_FAKE'),那么当调用更新/保存方法(myInstance.update(data))时,sequelize会认为该字段已更改,即使它可能没有。