水线多对多更新与现有记录

时间:2016-06-29 11:38:46

标签: javascript node.js sails.js waterline

我正在尝试编写模型的更新,以允许我的应用程序将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)。

1 个答案:

答案 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()的主键值数组会将关联设置为仅包含提供了这些主键值的记录。那就是 - 它取消了与协会的所有其他记录的链接。