1

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

铅.json

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

标签.json

"relations": {
    "leads": {
      "type": "hasAndBelongsToMany",
      "model": "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)

但是这次回送会抛出错误:Duplicate entry for LeadTag.id

不知道如何将现有标签添加到新潜在客户。确实有文档,例如here,有一个方法叫做

assembly.parts.add(part, function(err) {});

但是我的主要服务没有这种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"
    }

有任何想法吗?
谢谢

4

0 回答 0