【问题标题】:GraphQL query to cross reference dataGraphQL 查询以交叉引用数据
【发布时间】:2017-04-21 21:57:33
【问题描述】:

请在下面找到一个基本的简化问题和一个问题:

垄断例子

数据类型:

用户

  • 姓名

  • 房屋(一对多)

街道

  • 姓名

房子

  • 街道(一对一)

请注意,在我的数据模型中,用户和街道之间没有参考(也许垄断不是最好的例子 -.-)

问题:

一个用户可以在不同的街道上拥有多个房屋。如何查询特定用户拥有房屋的街道列表?

想要的结果:

{
    "data": {
        "User": {
            "name": "The Hat",
            "streets": [
            {
                name: "Bow Street"
            },
            {
                name: "Oxford Street"
            },
            {
                name: "Park Lane"
            },
            ]
        }
    }
}

这可能吗?

【问题讨论】:

    标签: graphql


    【解决方案1】:

    获取这样的关系数据通常是通过在查询中包含嵌套字段来处理的。在查询中遍历数据图的能力是 GraphQL 的最大优势之一。

    一般来说,this article about GraphQL APIs 是了解其工作原理的有用资源。

    让我们看看一些不同的可能查询。

    查询特定用户拥有房屋的街道列表

    query {
      allStreets(filter: {
        house: {
          user: {
            id: "user-id"
          }
        }
      }) {
        name
      }
    }
    

    这里我们使用a relational filter作为参数传入来查询与特定用户相关的时间相关的街道,结果是:

    {
      "data": {
        "allStreets": [
          {
            "name": "Bow Street"
          },
          {
            "name": "Oxford Street"
          },
          {
            "name": "Park Lane"
          }
        ]
      }
    }
    

    我们可以看到我们得到了一个街道列表。我们还可以在 allStreets 查询中包含 house 字段以获取该信息。

    查询一个特定的用户对象及其拥有房屋的街道列表

    query {
      User(id: "user-id") {
        name
        houses {
          street {
            name
          }
        }
      }
    }
    

    这里我们通过 id 指定一个用户,所以结果的顶层对象是单个用户对象。此外,我们正在获取用户拥有房屋的街道列表:

    {
      "data": {
        "User": {
          "name": "The Hat",
          "houses": [
            {
              "street": {
                "name": "Bow Street"
              }
            },
            {
              "street": {
                "name": "Oxford Street"
              }
            },
            {
              "street": {
                "name": "Park Lane"
              }
            }
          ]
        }
      }
    }
    

    值得注意的是,响应的结构完全遵循查询的结构。

    【讨论】:

    • 所以 graphQL 足够聪明,可以理解:用户 -> 房屋 -> 位置之间的关系?
    • 对不起!我没有正确遵循所描述的数据模型。让我更新我的答案:)
    猜你喜欢
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多