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

Sails.js model updatedAt (updated_at) not auto updating

预期行为:

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

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

实际行为:

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

代码运行:

model.update(primary, data)
.then(function updateCB(updated){
  // error handling
  sails.log('Updated successfully');
  sails.log(updated);
});

问题:


结果:Sails 问题

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

有关详细信息,请参阅下面的回答。

我无法回答 'why' 我尝试了同样的事情并且 运行 遇到了同样的问题。至于如何修复它-

我将它作为我想要的任何模型的模型文件中的一个属性,并像这样填写它:

    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 对象,所以如果我什么也没传递,那么整个事情就会失败。

结果:Sails 问题

我能够在一个新项目中重现它,所以它看起来像是 sails 的问题。问题 link: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 数据库中。