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});
我目前正在处理我的第一个 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});