Pass obtained field to another (nested) query in GraphQL

Viewed 20506

Imagine the following query:

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

How do you pass a parameter obtained from one query to another ?

3 Answers

In GraphQL, fields at each "level" of the request are executed and resolved in parallel. In your example, user and SomeOtherStuff are both fields of the same type (the root Query type) -- so they will be resolved at the same time. That means each query essentially is not aware of the other or what the other resolved to.

You would have to handle this kind of scenario client side. In other words, request the user first, parse the response for the id and then make the second request.

Edit: In Apollo, you would utilize compose for this purpose:

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)

I was looking for same scenario and landed on this question. You can get it work other way around. It all depends how you have written your graphql resolver and you need to make sure that your database relations are intact. I have got it working like this.

enter image description here

Related