-1

我是graphQL的新手。我的 Ghapgh Ql 查询需要以下格式{"offers": false, "new": true, "favourites": true},其中提供、新的、收藏夹是 java 类中的过滤器。查询可以有任意数量的此类过滤器。如何编写 graphql 查询,该查询将接受过滤器列表并像上面一样构建查询。我尝试通过编写上面的 hadcoded 查询。

4

1 回答 1

0

这个问题与您的问题相似,因为它讨论了使用 GraphQL 进行过滤的概念。还有一个关于第一个答案的评论导致一些 GraphCool 文档讨论他们的过滤方法。(GraphCool 文档)。我在 Java 方面不是很了解,所以希望这仍然有帮助。

不过,一般来说,您可以在查询中包含可选参数,如果存在,则在您的解析中过滤您的结果。

解析将 args 作为第二个参数。根据您想提供多少潜在过滤器,您可以选择正确的实现。

两个选项是,1) 有一个filter带有过滤器列表的参数。(这类似于 GraphCool;2)只需使用变量名作为 args 并过滤这些东西。

因此,对于您的示例,我不确定您的模型到底是什么样子或您使用的是什么类型的 DB/ORM,但如果您使用选项 2,您基本上可以在您的解决方案中过滤结果(JS 对不起,我'我不是 Java 专家)。

resolve: (_, args, context) => {
    const result = someDbInteractionForResult()
    result.filter( (item) => {
        for (const [filter, value] of Object.entries(args)) {
             const passFilter = value === item.filter;
             if (!passFilter) {
                 return false;
             }
        }
        return true;
    }
}

这仍然是以 GraphCool 方式传递过滤器的类似方法。我认为这个决定只是如果你还有其他args的,你也将包括在内。如果是这样,那么您将希望在其自己的对象中阻止您的过滤器,以便更轻松地分离您的关注点。

于 2017-07-21T14:23:40.280 回答