Strongloop Loopback:按相关模型的ID进行过滤

我有一些模型和关系的一个Strongloop Loopback Node.js项目。

手头的问题

我的问题涉及如何仅使用Angular SDK查询与某个Tag ID有关系的Media实例, 而不查询Tags.media (返回Tag实例),而是以某种方式进行查询以返回纯Tags.media 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": [] } 

解决scheme

现在,我知道我可以做这样的查询(在我的例子中使用Angular SDK,但语法是相同的):

 injector.get('Tag').find({ 'filter': { 'include': 'medias', 'where': {'id': <mytagid>} } }); 

我用这种方法的问题是,我收到1( oneTag实例与连接Media实例。 这干扰了为什么整个工作stream程只处理Media实例..我只是想通过Tag ID进行过滤 ,而不是打扰Tag

底线

如果我看到API浏览器( /explorer/ ),则GET /api/tags/<myTagID>/medias的返回值正是我需要的 – 一个Media对象数组 – 但是如何使用Angular SDK(lb_services)?

我有一个类似的问题。 一个build议是打开lb-services.js并尝试find:/ tags /:id / medias或类似的东西。 然后你会发现这样的评论:/ / 内部。 使用Tags.medias()来代替。 或类似的东西。 所以这是你应该调用的方法。 不要调用“prototype $ __ get …..”方法。

然后就打电话给我说:Tag.medias({id:})

其他build议:

正如你在描述中所说的,媒体有许多标签。 那么为什么不使用

 { "name": "media", "base": "PersistedModel", "properties": { "id": { "type": "string", "id": true } }, "relations": { "tags": { "type": "hasMany", <---------- hasMany "model": "tag", "foreignKey": "tagId" <---FK name } } 

而标签只属于types。

 { "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>}) 

对于media /:id / tags

并为对方尝试:

 Tag.medias({id:<tagId>}) Tag.find({ filter:{ where:{mediaId: <mediaId>} <----mediaId comes from FK name } }) 

在这种情况下,两者都是持久性模型,没有任何问题,但是在使用扩展用户types的数据做类似事情时,我遇到了许可问题。 不过那是另一回事了…

希望这是有帮助的,我改变了一些类似的应用程序,我正在做的东西,并希望不适应你的代码时,这么多的错误…