我试图在我的 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"
}
有任何想法吗?
谢谢