预期行为:
使用.update()成功更新记录后,记录的updated_at
字段应自动更新为当前时间。
注意:我在config.models中使用autoUpdatedAt: 'updated_at'
更改了autoUpdatedAt设置(也提到了here),因此该字段的标题为updated_at
,而不是{{ 1}}。它应该仍然具有我假设的相同功能。
实际行为:
模型已成功更新,但未更新updatedAt
字段。
代码运行:
updated_at
问题:
结果:Sails问题
我能够在一个新项目上重现它,所以它看起来像是帆的问题。问题链接:https://github.com/balderdashy/sails/issues/3821
请参阅下面的答案以获取更多信息。
答案 0 :(得分:5)
我无法回答'为什么'我尝试了同样的事情并遇到了同样的问题。至于如何解决它 -
我在我的模型文件中为我想要的任何模型创建了一个属性,并将其填写如下:
updated_at:{
type: 'datetime',
defaultsTo: function(){return new Date();}
}
将我的数据库中的列(本例中为mysql)设置为NOT NULL
和DATETIME
并设置为更新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数据库中。