我目前正在开发我的第一个Loopbackjs项目,并面临着一个看似简单的问题: 让我们说我有一个模特" Post"和模型"标记"。邮政拥有并属于许多标签。
现在我需要列出具有特定标签的所有帖子。我只是无法弄清楚如何使用Loopback创建一个实现此目的的查询。
我认为它会像这样工作,但它并不是:
Posts.find( {where: {tag.id: {inq: [1, 4]}}} );
我非常感谢任何帮助。
答案 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});