【问题标题】:how to update the field 'updated_at' of a sequelize model without modifiyng any attributes如何在不修改任何属性的情况下更新续集模型的“updated_at”字段
【发布时间】:2015-10-07 14:07:42
【问题描述】:

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

例如,在 Laravel 等其他框架中,您可以使用 model.touch() 自动更新模型的“updated_at”。

我已经尝试使用 model.save() 但正如 sequelize 文档所说,在没有属性的情况下调用此方法没有任何作用。此外,在文档中,我没有找到任何可以让我简单地做我需要做的事情的东西。

提前感谢您的帮助。

编辑: 举一个我想要实现的例子,我已经有了我的模型的一个实例: 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?

【问题讨论】:

    标签: node.js postgresql timestamp sequelize.js


    【解决方案1】:

    要更新实例值,您可以使用instance.set(key, value, [options])

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

    sequelize docs 有一个很好的例子,如果您没有实例,则执行更新查询:

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

    【讨论】:

    • 我想避免这个查询,因为我已经有了我的类的一个实例。现在我正在尝试使用此实例进行更新。
    • 提供的实例方法似乎对我不起作用。
    • 由于您在上面引用了“updated_at”而不是“updatedAt”,也许您需要引用正确的字段。如果您将配置设置为{ timestamps: true, updatedAt: 'updated_at' } 或类似的东西,这也可能(令人困惑的情况)。您需要引用带下划线的版本,而不是驼峰式版本。
    • 我们可以将 updatedAt 设置为数据库当前时间戳吗?在 postgres 中:'updated_at = now()' 我们不想从 nodejs 设置日期(略有不同),也不想使用 db 触发器。
    • 我不了解 PostgreSQL,但以下适用于我的 MySQL:myInstace.changed('updatedAt', true); myInstance.save();
    【解决方案2】:

    我的解决方案有点老套。我必须将实例上的一个字段更新为与应有的不同,以便 sequelize 认为该字段已更改,即使它没有更改;并确保之后传入正确的字段数据。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-02
      • 2023-03-20
      • 2012-04-19
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 2018-03-06
      • 2013-03-30
      相关资源
      最近更新 更多