Sails.js模型updatedAt(updated_at)不自动更新

时间:2016-08-25 21:03:24

标签: javascript sails.js waterline

预期行为:

使用.update()成功更新记录后,记录的updated_at字段应自动更新为当前时间。

注意:我在config.models中使用autoUpdatedAt: 'updated_at'更改了autoUpdatedAt设置(也提到了here),因此该字段的标题为updated_at,而不是{{ 1}}。它应该仍然具有我假设的相同功能。

实际行为:

模型已成功更新,但未更新updatedAt字段。

代码运行:

updated_at

问题:

  • 这是为什么?
  • 我该如何解决这个问题?

结果:Sails问题

我能够在一个新项目上重现它,所以它看起来像是帆的问题。问题链接:https://github.com/balderdashy/sails/issues/3821

请参阅下面的答案以获取更多信息。

2 个答案:

答案 0 :(得分:5)

我无法回答'为什么'我尝试了同样的事情并遇到了同样的问题。至于如何解决它 -

我在我的模型文件中为我想要的任何模型创建了一个属性,并将其填写如下:

    updated_at:{
        type: 'datetime',
        defaultsTo: function(){return new Date();}
    }

将我的数据库中的列(本例中为mysql)设置为NOT NULLDATETIME并设置为更新CURRENT_TIMESTAMP on UPDATE

如果您在更新通话之前无权访问数据库,也可以将其放入代码中:

data.updated_at = new Date();
model.update(primary,data)....

这将完成同样的事情。

这是我能够提出的最简单的工作。

我开始考虑这个问题,然后我想出了第三个选项,一个类似的模型方法:

attributes:{
    //stuffs
},
beforeUpdate: function(obj, next){
    obj.updated_at = new Date();
    return next(null, obj);
}

第一个位置的null是因为据我所知,Sails期望整个调用链中有一个error对象,所以如果我没有通过任何东西,那么整个事情就会被淘汰。

答案 1 :(得分:0)

结果:Sails问题

我能够在一个新项目上重现它,所以它看起来像是帆的问题。问题链接:https://github.com/balderdashy/sails/issues/3821

代码运行:

Test.create()
.then(function(created){
    sails.log('created');
    sails.log(created);

    Test.update(created, {})
    .then(function(updated){
        sails.log('updated');
        sails.log(updated[0]);

        Test.findOne(updated)
        .then(function(found){
            sails.log('found');
            sails.log(found);

            res.end();
        });
    });
});

代码结果:

debug: created
debug: { createdAt: '2016-08-25T21:35:46.679Z',
  updated_at: '2016-08-25T21:35:46.679Z',
  id: 1 }
debug: updated
debug: { createdAt: '2016-08-25T21:35:46.679Z',
  updated_at: '2016-08-25T21:35:46.679Z',
  id: 1,
  updatedAt: '2016-08-25T21:35:46.698Z' }
debug: found
debug: { createdAt: '2016-08-25T21:35:46.679Z',
  updated_at: '2016-08-25T21:35:46.679Z',
  id: 1,
  updatedAt: '2016-08-25T21:35:46.698Z' }

看起来Sails仍在添加一个updatedAt字段,该字段未保存到我的SQL数据库中。