当我更新模型时,水锁.update()
总是返回一个对象数组,即使我设置了primaryKey
标准。
Ad.update({ id: req.param('id') }, {
// desired attributed to be updated
}).exec(function(err, updatedRecord) {
// updatedRecord is always an array of objects
});
为了使用updatedRecord,我必须指出像0
这样的updatedRecord[0]
索引,这是我认为不太干净的东西。根据文档update() in sails,这是一个常见的情节。
知道这一点,我有两个问题:
当你发现一个模型只返回该模型的更新对象而不是数组时,会不会更好?
如果这是一个约定,当.update()
只影响一条记录时,怎么可以覆盖此函数以便只返回一个对象而不是一个数组?
答案 0 :(得分:1)
它是一个约定,它将更新匹配查找条件的所有记录,但由于您可能在模型上使用唯一验证,它可能会返回1或0的数组。你需要手头做。
您可以通过实现与waterline default同名的方法来覆盖模型中的方法。但是,由于您需要完全重写代码,因此它不可行。都没有改变水线底层代码。
解决方案是在广告模型上创建新功能:
module.exports = {
attributes: {
adid: {
unique: true,
required: true
},
updateMe: {
}
},
updateOne: function(adid, newUpdateMe, cb){
Ad.update({ id: req.param('id') }, {
// desired attributed to be updated
}).exec(function(err, updatedRecord) {
// updatedRecord is always an array of objects
if (updatedRecord.length == 1){
return cb(null, updatedRecord[0]);
}
return cb(null, {}); //also can error if not found.
});
}
};
另外。避免使用id作为模型属性(使用其他名称),因为某些数据库(如mongodb)已将此属性添加为默认值,并可能导致与模型冲突。
答案 1 :(得分:0)
我不认为它可能与水线。因为更新方法是一个通用的方法,在条件总是不是这样的情况下传递主键。