如何在 GraphQL 中添加列表

Posted

技术标签:

【中文标题】如何在 GraphQL 中添加列表【英文标题】:How to add List in GraphQL 【发布时间】:2017-12-27 00:13:44 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

Resolves 将 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,您也将包括在内。如果是这样,那么您将希望在其自己的对象中屏蔽您的过滤器,以便更轻松地分离您的关注点。

【讨论】:

以上是关于如何在 GraphQL 中添加列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 GraphQL 中为对象中的对象列表定义类型

如何在 Graphql Relay 中处理连接内的列表

如何在我的GraphQL中为对象中的对象列表定义类型

在 GraphQL 查询中分组后如何限制和跳过标签列表页面的分页?

如何在反应js中将graphql列表传递给apollo中的突变

如何在 GraphQL 中创建自定义对象列表