我有一个Strongloop Loopback Node.js项目,包含一些模型和关系。
手头的问题
我的问题涉及如何仅使用Angular SDK查询与Media
个ID相关的Tag
个实例 - 不查询Tags.media
(返回Tag
个实例),而是以某种方式进行查询,返回纯Media
个实例。
请阅读以下具体信息..
规格
基本上,我有一个模型Media
,它有许多'标签'(模型Tag
)。想象一下具有各种EXIF标签(Media
)的图像文件(Tag
)。这是关系规范(这一切都按预期工作):
媒体(media.json):
{
"name": "media",
"base": "PersistedModel",
"properties": {
"id": {
"type": "string",
"id": true
}
},
"relations": {
"tags": {
"type": "hasAndBelongsToMany",
"model": "tag"
}
}
Tag(tag.json):
{
"name": "tag",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"name": {
"type": "string",
"required": true
}
},
"relations": {
"medias": {
"type": "hasAndBelongsToMany",
"model": "media"
}
},
"acls": [],
"methods": []
}
解决方案
现在,我知道我可以这样做一个查询(在我的示例中使用Angular SDK,但语法是相同的):
injector.get('Tag').find({
'filter': {
'include': 'medias',
'where': {'id': <mytagid>}
}
});
我对这种方法的问题是,我收到了带有one
个实例的1(Tag
)Media
个实例。这会破坏整个工作流程的原因,因为我只处理Media
个实例..我只想按Tag
ID 过滤,而不是打扰Tag
。< / p>
底线
如果我看到API资源管理器(/explorer/
),GET /api/tags/<myTagID>/medias
的返回值正是我所需要的 - 一组Media
个对象 - 但是如何查询它们就像这样使用Angular SDK(lb_services)?
答案 0 :(得分:3)
我有类似的问题。一个建议是打开lb-services.js并尝试查找:/ tags /:id / medias或类似的东西。然后你会发现这样的评论: // INTERNAL。请改用Tags.medias()。或类似的东西。这就是你应该调用的方法。不要调用&#34;原型$ __ get .....&#34;方法
然后只需调用它在那里所说的内容:Tag.medias({id:})
其他建议:
正如您在描述中所说,媒体有很多标签。那么为什么不使用
{
"name": "media",
"base": "PersistedModel",
"properties": {
"id": {
"type": "string",
"id": true
}
},
"relations": {
"tags": {
"type": "hasMany", <---------- hasMany
"model": "tag",
"foreignKey": "tagId" <---FK name
}
}
和 标签只是属于类型。
{
"name": "tag",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"name": {
"type": "string",
"required": true
}
},
"relations": {
"medias": {
"type": "belongsTo",
"model": "media",
"foreignKey": "mediaId" <---FK name
}
},
"acls": [],
"methods": []
}
但实际上我并不认为这是问题所在,因为你说当你请求GET /api/tags/<myTagID>/medias
时它会返回你想要的东西。
然后,在AngularJS中,您可以使用:
Media.tags({id:<mediaId>})
for media /:id / tags
并为另一方尝试:
Tag.medias({id:<tagId>})
Tag.find({
filter:{
where:{mediaId: <mediaId>} <----mediaId comes from FK name
}
})
在这种情况下,两者都是持久性模型没有问题,在使用扩展用户类型的数据执行类似操作时,我遇到了权限问题。但这是另一个故事......
希望这有用,我从我正在做的类似应用程序中更改了一些内容,并希望在适应您的代码时不会出现太多错误...