Strongloop环回:根据相关模型的id进行过滤
Strongloop Loopback: Filter by id of related Model
我有一个Strongloop Loopback Node.js项目,其中包含一些模型和关系。
眼前的问题
我的问题涉及如何使用Angular SDK-只查询那些与某个Tag
id有关系的Media
实例,而不查询Tags.media
(返回Tag
实例),而是以某种方式进行查询,返回普通的Media
实例。
有关具体信息,请阅读以下内容。。
规格
基本上,我有一个型号Media
,它有很多"标签"(型号Tag
)。想象一个具有各种EXIF标签(Tag
)的图像文件(Media
)。以下是关系规范(这一切都如预期):
介质(Media.json):
{
"name": "media",
"base": "PersistedModel",
"properties": {
"id": {
"type": "string",
"id": true
}
},
"relations": {
"tags": {
"type": "hasAndBelongsToMany",
"model": "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>}
}
});
我使用这种方法的问题是,我收到了1个(one
)Tag
实例,其中附带了Media
实例。这扰乱了为什么整个工作流程,因为我只处理Media
实例。。我只想通过Tag
id过滤,根本不关心Tag
。
底线
如果我看到API资源管理器(/explorer/
),GET /api/tags/<myTagID>/medias
的返回值正是我所需要的-一个Media
对象的数组-但如何使用Angular SDK(lb_services)像这样查询它们?
我也遇到了类似的问题。一个建议是打开lb-services.js并尝试查找:/tags/:id/medias或类似的东西。然后你会发现这样的评论://内部。请改用Tags.medias()或者类似的东西。所以这就是你应该调用的方法。不要调用"prototype$__get….."方法。
我想,那就把它说的叫做:Tag.medias({id:})
其他建议:
正如你在描述中所说,媒体有很多标签。那么为什么不只使用呢
{
"name": "media",
"base": "PersistedModel",
"properties": {
"id": {
"type": "string",
"id": true
}
},
"relations": {
"tags": {
"type": "hasMany", <---------- hasMany
"model": "tag",
"foreignKey": "tagId" <---FK name
}
}
以及对于只属于To类型的标记。
{
"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>})
对于介质/:id/标签
另一方尝试:
Tag.medias({id:<tagId>})
Tag.find({
filter:{
where:{mediaId: <mediaId>} <----mediaId comes from FK name
}
})
在这种情况下,两者都是持久模型——没有问题,我在对扩展User类型的数据进行类似操作时遇到了权限问题。但那是另一回事。。。
希望这是有帮助的,我从我正在做的类似应用程序中更改了一些内容,并希望在适应你的代码时不要犯那么多错误。。。
- jquery对标记类型和id进行过滤
- Strongloop环回:根据相关模型的id进行过滤
- 如何在 onActiveCellChanged 事件中从过滤的光滑网格中获取正确的行 ID
- 在主干网中过滤的 ID 数组上使用 .set
- AngularJS 过滤器:将具有唯一 ID 的对象过滤到单独的对象中
- 通过ID工作进行ng重复跟踪,如何在ng重复中过滤
- 基于 id Angularjs 过滤嵌套的 JSON 数据
- 如何使用jQuery-ajax在JSON文件中传递id,只带来过滤后的数据
- AngularJS-如何过滤一堆特定的ID
- 通过id过滤数组angularjs的数组
- 自定义正则表达式过滤掉最后一个url路径中的ID
- Angular通过friends内部的friend.brand.id进行过滤可以工作,但不能使用'undefin
- 过滤您的类型,搜索名称的Div ID
- 如何在angularjs中基于ID过滤结果
- 通过id字段过滤数组列表到一个新变量
- 通过id数组过滤角度数据
- 如何在javascript中过滤基于id的HTML图像
- AngularJS通过ID过滤
- 无法过滤唯一ID's
- Backbone.js:如何通过模型ID数组过滤对象集合