LoopbackJS:HasAndBelongsToMany,如何通过 属性 的关系 query/filter?

LoopbackJS: HasAndBelongsToMany, how to query/filter by property of relation?

我目前正在处理我的第一个 Loopbackjs 项目,并且面临一个看似简单的问题: 假设我有一个模型 "Post" 和一个模型 "Tag"。一个 Post 拥有并属于多个标签。

现在我需要列出所有带有特定标签的帖子。我只是不知道如何使用 Loopback 创建一个查询来实现这一点。 我认为它会像这样工作,但事实并非如此: Posts.find( {where: {tag.id: {inq: [1, 4]}}} ); 

如有任何帮助,我将不胜感激。

对一些相关属性进行筛选并不像应该的那么容易。 There is a pull request outstanding but it's been open for a long time now.据我所知,过滤的唯一方法是在主模型上,所以你可以这样做:

Tags.find({"include":"posts","where":{"id":{"inq":[1, 4]}}})

不幸的是,您需要做额外的工作才能从返回的结果中获得 Post 的良好列表。

EDIT 您也可以获取所有 Posts 并且仅使用 scope 返回与您的查询匹配的标签,其中:

Posts.find({
    "include": { "relation": "tags", 
                    "scope": { 
                        "where": {
                            "id": { "inq": [1, 4]}
                        }
                    }
                }
});

在查询的回调中,您可以在 returning 之前使用以下代码整理结果:

var finalresult = instance.filter(function(post) {
    return post.toJSON().tags.length > 0;
});

好处是 returned 结果的格式符合您的预期。但是,我的第二个示例的性能可能非常差,因为它总是 return 你所有的 Post,除非你在 Post 级别指定过滤器或分页。它基本上是一个 Left Join,你想要一个 Inner Join,而 Loopback 目前还做不到。

我带着同样的问题来到这里,但经过一番研究后我得到了这个解决方案。

我要举个例子:模型 Provincias hasAndBelongsToMany Cantones。

为了得到:/api/Provincias/1/cantones

您可以在 Angular 代码中使用:

Provincias.cantones({'id': 1});