首页 > 解决方案 > 有没有办法在 graphQL 中对查询进行分组?

问题描述

我正在尝试对 graphQL 查询进行分组以获得更有条理的响应。

我想查询 allEmployees 并以下列格式取回一些东西

GraphQL 查询

{
    Employees:allEmployees{
        id
        firstName
        lastName    
    }
}

回复

{
    "data": {
        "Employees": [
            "new":[
                {
                    "id": "1",
                    "firstName": "James",
                    "lastName": "Test"
                },
                {
                    "id": "3",
                    "firstName": "Charles",
                    "lastName": "Tes"
                }
            ],
            "updated":[
                {
                    "id": "4",
                    "lastName": "Test"
                },
            ],
            "deleted":[
                {
                    "id": "1",
                },
            ],
        }
    }
}

我已经研究了一些选项来通过片段上的别名来命名子请求(比如新的、更新的和删除的),但这似乎不是一回事。我看过工会,但这似乎不是我想要的。

理想情况下,我很想像...一样查询graphql

{
    Employees:{
        new: allEmployees(status:"new"){
            id
            firstName
            lastName    
        }

        updated: allEmployees(status:"updated"){
            id
            firstName
            lastName    
        }

        deleted: allEmployees(status:"deleted"){
            id
        }
}

但我认为不可能传递这样的嵌套查询。

反正有做这样的事情吗?我通过 graphql-ruby gem 将 graphql 与 ruby​​ 一起使用。

如果有人需要更多信息,请告诉我?

谢谢


编辑

澄清。我们有多个实体将遵循新的、更新的、删除的模式。希望尝试在结果嵌套在父名称/别名(员工、用户)中的情况下获得响应

{
    "data": {
        "Employees": [
            "new":[...],
            "updated":[...],
            "deleted":[...],
        ],
        "Users": [
            "new":[...],
            "updated":[...],
            "deleted":[...],
        ],
         ...                   
}

这就是为什么我们要嵌套

标签: graphqlgraphql-ruby

解决方案


GraphQL 绝对支持嵌套查询和多个顶级查询,graphql-ruby 支持这些就好了。

如果您的 GraphQL 架构如下所示:

type Employee {
  id: ID!
  firstName: String
  lastName: String
}
enum Status { NEW, UPDATED, DELETED }
type Query {
  allEmployees(status: Status): [Employee!]!
}

那么你可以写一个查询

fragment EmployeeData on Employee { id firstName lastName }
query Everyone {
  new: allEmployees(status: NEW) { ... EmployeeData }
  updated: allEmployees(status: UPDATED) { ... EmployeeData }
  deleted: allEmployees(status: DELETED) { ... EmployeeData }
}

这不会有您正在寻找的特定形式 - 没有很好的方法可以在查询中添加或删除任意级别,例如添加“员工”标签或从 React 样式的连接记录中删除层 - 但它可以检索您要查找的数据。


推荐阅读