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 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
对象,所以如果我什么也没传递,那么整个事情就会失败。
结果: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 数据库中。
预期行为:
使用 .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 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
对象,所以如果我什么也没传递,那么整个事情就会失败。
结果: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 数据库中。