我正在尝试编写模型的更新,以允许我的应用程序将Id的数组(或对象ID的数组)传递给服务器,并且更新函数将删除所有现有关系并添加新的关系
例如我发送的数据是:
{
"id":1,
"newIds":[3,4,5,6,7],
}
数据库中的当前ID是:
[1,2,3,4,5]
因此,在我更新后,我希望ID为:
[3,4,5,6,7]
我目前拥有的更新功能是:
var id = req.param('id'),
newIds = req.param('newIds');
User.findOne({id: id})
.exec(function(err, results){
if(err) return res.serverError(err);
var user = results;
if (user){
if (newIds && newIds.length > 0) {
user.ids.add(newIds);
}
user.save(function(err) {
if(err) {
return res.serverError(err);
};
result.success = true;
return res.json(result);
});
}
});
然而,当我调用更新时,我得到一个错误抱怨已经存在的关系(它抱怨id已经存在的3,4和5)。
答案 0 :(得分:2)
只需将add() + save()
替换为update()
。
var id = req.param('id'),
newIds = req.param('newIds');
User.update({id: id}, {ids: newIds})
.then(function(updatedUser) {
result.success = true; // assuming you've defined result somewhere earlier
return res.json(result)
})
.catch(res.serverError)
请参阅:http://sailsjs.org/documentation/reference/waterline-orm/models/update
为集合关联传递给.update()的主键值数组会将关联设置为仅包含提供了这些主键值的记录。那就是 - 它取消了与协会的所有其他记录的链接。