LoopbackJS:HasAndBelongsToMany,如何按关系属性查询/过滤?

时间:2015-10-02 08:29:10

标签: angularjs node.js loopbackjs strongloop

我目前正在开发我的第一个Loopbackjs项目,并面临着一个看似简单的问题: 让我们说我有一个模特" Post"和模型"标记"。邮政拥有并属于许多标签。

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

我非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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]}}})

不幸的是,你需要做额外的工作才能从你得到的结果中获得很好的帖子列表。

编辑您也可以获取所有帖子,只使用scope带回与您的查询匹配的标记,并带有以下内容:

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

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

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

好处是返回的结果按照您的预期格式化。但是,我的第二个示例的性能可能非常差,因为它将始终返回所有帖子,除非您在Post级别指定过滤器或分页。它基本上是一个左连接,你想要一个内连接,Loopback目前无法做到。

答案 1 :(得分:0)

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

我将使用一个例子:模型Provincias hasAndBelongsToMany Cantones。

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

您可以在Angular代码中使用:

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