Arrays 覆盖sails更新以仅返回一个对象
更新模型时,waterlock.update始终返回一个对象数组,即使我在primaryKey上设置了条件 在我的密码上 <> P>并且为了使用更新的记录,我必须指出0个索引,比如UpDeDeDebug记录[0 ],这是我认为不太干净的东西。据docs称,这是一种常见的escenario 知道这一点,我有两个问题: 如果发现一个模型只返回该模型的更新对象,而不是数组,这不是更好吗 如果这是一种约定,那么当.update仅影响一条记录时,如何重写此函数以仅返回一个对象而不是数组Arrays 覆盖sails更新以仅返回一个对象,arrays,callback,sails.js,sails-postgresql,waterlock,Arrays,Callback,Sails.js,Sails Postgresql,Waterlock,更新模型时,waterlock.update始终返回一个对象数组,即使我在primaryKey上设置了条件 在我的密码上 P>并且为了使用更新的记录,我必须指出0个索引,比如UpDeDeDebug记录[0 ],这是我认为不太干净的东西。据docs称,这是一种常见的escenario 知道这一点,我有两个问题: 如果发现一个模型只返回该模型的更新对象,而不是数组,这不是更好吗 如果这是一种约定,那么当.update仅影响一条记录时,如何重写此函数以仅返回一个对象而不是数组 我认为吃水线是不可能的
我认为吃水线是不可能的。这是因为update方法是一种通用方法,在条件不总是这样的情况下传递主键。通常它会更新所有与查找条件匹配的记录,但由于您可能在模型上使用唯一的验证,它可能会返回一个1或0的数组。你需要自己动手做 通过实现与水线默认值同名的方法,可以重写模型中的方法。但是,由于您需要完全重写代码,这是不可行的。既不改变水线底层代码 解决方案是在您的广告模型上创建新功能:
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)已将此属性添加为默认值,可能会导致与模型冲突
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.
});
}
};