我目前正在开发我的第一个 Loopbackjs 项目,并面临一个看似简单的问题: 假设我有一个模型“Post”和一个模型“Tag”。一个帖子拥有并属于多个标签。
现在我需要列出带有特定标签的所有帖子。我只是不知道如何使用 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]}}})
不幸的是,您需要做额外的工作才能从返回的结果中获得一个不错的帖子列表。
编辑您也可以使用scope
获取所有帖子并仅带回与您的查询匹配的标签,具体如下:
Posts.find({
"include": { "relation": "tags",
"scope": {
"where": {
"id": { "inq": [1, 4]}
}
}
}
});
在查询的回调中,可以使用以下代码对结果进行整理后再返回:
var finalresult = instance.filter(function(post) {
return post.toJSON().tags.length > 0;
});
好处是返回的结果的格式符合您的预期。但是,我的第二个示例的性能可能非常差,因为它总是返回所有帖子,除非您在帖子级别指定过滤器或分页。它基本上是一个左连接,当你想要一个内连接时,环回目前无法做到这一点。
关于angularjs - LoopbackJS:HasAndBelongsToMany,如何按关系的属性查询/过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32903293/