我尝试在Loopback应用程序中定义与我的Lead和Tag模型的多对多关系
Lead.json
"relations": {
"tags": {
"type": "hasAndBelongsToMany",
"model": "Tag"
}
}
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"
}
任何想法?
感谢