【问题标题】:LoopbackJS: HasAndBelongsToMany, how to query/filter by property of relation?LoopbackJS:HasAndBelongsToMany,如何按关系的属性查询/过滤?
【发布时间】:2015-12-30 10:26:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: angularjs node.js loopbackjs strongloop


    【解决方案1】:

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

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

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

    您可以在 Angular 代码中使用:

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

    【讨论】:

    • 欢迎来到 Stackoverflow。请花一些时间阅读如何写一个好的答案。阅读thisthis
    【解决方案2】:

    对某些相关属性进行过滤并不像应有的那么容易。 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;
    });
    

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

    【讨论】:

    • 非常感谢!我现在这样做,然后过滤掉重复项。但是我认为这是 LoopbackJS ORM 的一个很大的限制,我正在重新考虑将它用于更大的项目。
    • @Nanunana 当我发现时我简直不敢相信......我做了更多的挖掘并找到了另一种方法。仍然不是很好,但也许会好一点。查看我的编辑。
    • 嘿,我有一个 hasOne 关系,并且这样做可以正常工作.. 但它包括关系字段和主要对象.. 是否可以将其分开?前任。假设标签有字段标记名.. 所以它是 Post.tagname.. 而不是 Post.tag.tagname
    • @mariomol 不确定我是否理解 - 你能用你的代码创建一个单独的问题吗?
    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多