Angularjs 循环多对多关系混乱

Angularjs 循环多对多关系混乱,angularjs,loopbackjs,angular-loopback,Angularjs,Loopbackjs,Angular Loopback,我试图在环回应用程序中定义与Lead和Tag模型的多对多关系 Lead.json "relations": { "tags": { "type": "hasAndBelongsToMany", "model": "Tag" } } Tag.json "relations": { "leads": { "type": "hasAndBelongsToMany", "model": "Lead" } } 现在我想给我

我试图在环回应用程序中定义与Lead和Tag模型的多对多关系

Lead.json

"relations": {
    "tags": {
      "type": "hasAndBelongsToMany",
      "model": "Tag"
    }
}
Tag.json

"relations": {
    "leads": {
      "type": "hasAndBelongsToMany",
      "model": "Lead"
    }
}
现在我想给我的lead模型添加一个标记,我的angularService执行这个方法

this.addTag = function (id, tag) {
   if (tag.id) {
      return Lead.tags.link({
          id: id,
          fk: tag.id
      }).$promise
   } else {
      return Lead.tags.create({
          id: id
      }, tag).$promise
   }
};
第一次呼叫按预期工作,这将为我现有的潜在客户添加新标签

Lead.tags.create({id: 1}, {name: 'NewTag'}); //leadId = 1, tagId = 0 (new Tag) indeed there is no ID field, it's just for simplicity
现在我想给我的新潜在客户添加相同的标签

Lead.tags.link({id: 2, fk: 1}); //leadId = 2, tagId = 1 (existing Tag)
但这次环回抛出错误:
LeadTag.id的重复条目

不知道如何将现有标签添加到新潜在客户。例如,确实存在文档,并且有一个名为

assembly.parts.add(part, function(err) {});
但是我的lead服务没有这个
lead.tags.add
方法

根据源代码,Lead.tags.link如下所示

    // INTERNAL. Use Lead.tags.link() instead.
    "::link::Lead::tags": {
      params: {
      'fk': '@fk'
      },
      url: urlBase + "/leads/:id/tags/rel/:fk",
      method: "PUT"
    },

    // INTERNAL. Use Lead.tags.unlink() instead.
    "::unlink::Lead::tags": {
      params: {
      'fk': '@fk'
      },
      url: urlBase + "/leads/:id/tags/rel/:fk",
      method: "DELETE"
    }
有什么想法吗?

谢谢

我想说清楚,当您使用
Lead.tags.add()
时,您是在实例上还是在模型本身上这样做的?
add()
方法需要位于lead的实例上。。。比如:
Lead.findById(13,函数(err,instance){instance.tags.add(someTagInstance,…)})
var lead=lead.findById({id:1,筛选器:{include:'tags'})
在lead.tags中没有
add
,因为它是一个数组,在前端是正确的。在服务器上,我认为有一个方法。您要做的第一件事是使用debug strings()运行服务器,以获取有关错误的更多信息。尝试
DEBUG=strong远程处理:*节点。
另外,您的模型配置很好(我刚刚尝试过),angular进行的REST api调用也很好。我看到的唯一错误是id,请注意id开始是1,而不是0。因此,当您使用
Lead.tags.add()时,
NewTag
将具有ID 1,这只是为了清楚起见,您是在实例上还是在模型本身上这样做?
add()
方法需要位于lead的实例上。。。比如:
Lead.findById(13,函数(err,instance){instance.tags.add(someTagInstance,…)})
var lead=lead.findById({id:1,筛选器:{include:'tags'})
在lead.tags中没有
add
,因为它是一个数组,在前端是正确的。在服务器上,我认为有一个方法。您要做的第一件事是使用debug strings()运行服务器,以获取有关错误的更多信息。尝试
DEBUG=strong远程处理:*节点。
另外,您的模型配置很好(我刚刚尝试过),angular进行的REST api调用也很好。我看到的唯一错误是id,请注意id开始是1,而不是0。因此
NewTag
将具有ID 1