将获取的字段传递给GraphQL中的另一个查询

时间:2017-11-11 16:20:28

标签: graphql

想象一下以下查询:

query {
  user {
    id
  }
  SomeOtherStuff(id: <--- I want to pass the id obtained from user) {
    id
  }
}

如何将从一个查询获得的参数传递给另一个查询?

3 个答案:

答案 0 :(得分:4)

在GraphQL中,每个&#34;级别的字段&#34;请求的执行和并行解决。在您的示例中,userSomeOtherStuff都是相同类型的字段(根Query类型) - 因此它们将同时被解析。这意味着每个查询基本上都不知道另一个或另一个解析的内容。

您必须处理此类方案客户端。换句话说,首先请求用户,解析id的响应,然后发出第二个请求。

编辑:在Apollo中,你会为此目的使用compose:

const userQuery = gql`query User { user { id } }`;
const stuffQuery = gql`query SomeOtherStuff($id: ID) { someOtherStuff(id: $id){ stuff } }`;

export default compose(
  graphql(userQuery, { name: 'userData' })
  graphql(stuffQuery, { name: 'stuffData', options: ({userData:{id}={}}) => ({variables: {id}}) }),
)(YourComponent)

答案 1 :(得分:3)

我同意@DanielRearden。你应该制作类型解析器,这样你就可以无限深入到图形中。我做了一个简单的服务器示例here,显示了深层次的关系。因为所有的名词字段都是引用,所以对于任何查询都是无限深的。

使用该服务器,您可以运行这样的查询,例如:

{
  hero {
    name
    friends {
      name
      friends {
        name
        friends {
          name
          friends: {
            name
          }
        }
      }
    }
  }
}

因此,在您的示例中,将其结构如下:

query {
  user {
    id
    otherStuff {
      id
    }
  }
}

答案 2 :(得分:0)

我一直在寻找相同的场景并找到了这个问题。你可以用其他方式让它工作。这完全取决于您如何编写 graphql 解析器,并且您需要确保您的数据库关系完好无损。我已经让它像这样工作了。

enter image description here