Search code examples
angulargraphqlsymfony4apollo-clientgraphiql

Graphql Mutation with Array types


I'm trying to write a mutation query and it works perfectly with graphql

mutation($project: ProjectsInput) {
  NewProject(project: $project) {
    name,
    namespace,
    environments{
      env,      
    }}}

these are the query variables

{"project": {
   "name": "Pr1",
  "namespace": "Pr2",
  "environments": 

  [{"env": "rec"},{"env": "dev"}]


}}

and this is how it looks graphql mutation now I am trying to use Apollo Client in angular to build this mutation like so


    createProject() {
    this.apollo.mutate({
      mutation: gql`
      mutation($project: ProjectsInput) {
        NewProject(project: $project) {
          name,
          namespace,
          environments{
            env,      
          }
    `,
      variables: { 
        project: {
          name: "sth",
          namespace: "sth2",
          env: [
            {env:"env1"},
            {env:"env2"}
          ]
        } 
      }
    }).subscribe(data => {
      console.log('New project created!', data);

    });  }

But i'm getting Http failure response because of the variable $env of type Array.i want to pass an array as a variable for the query in apollo client.I don't have problems with variables of type string but the array objects causes this error.


Solution

  • NewProject(project: shows that your NewProject mutation needs one project parameter

    change query to

    mutation($project: ProjectsInput) {
      NewProject(project: $project) {
        name,
        namespace,
        environments{
          env,      
        }
    

    and pass one, entire object to variable project

    use query variables in graphiql to define test variables:

    { 
      project: {
        name: "sth",
        namespace: "sth2",
        environments: [
          {env:"env1"},
          {env:"env2"}
        ]
      } 
    }
    

    then in client prepare the same kind of object for project variable (with structure matching your mutation input type, of course).