Interactuar con la API GraphQL
Interactuar con la API GraphQLEjecutar mutaciones masivas

Ejecutar mutaciones masivas

Gato GraphQL proporciona campos de mutación "bulk" para todas las mutaciones del esquema, permitiéndonos mutar múltiples recursos.

Por ejemplo, la mutación createPosts (la mutación de un único recurso es createPost) creará múltiples entradas:

mutation CreatePosts {
  createPosts(inputs: [
    {
      title: "First post"
      contentAs: {
        html: "This is the content for the first post"
      }
    },
    {
      title: "Second post"
      contentAs: {
        html: "Here is another content, for another post"
      }
      excerpt: "The cup is within reach"
    },
    {
      title: "Third post"
      contentAs: {
        html: "This is yet another piece of content"
      },
      authorBy: {
        id: 1
      },
      status: draft
    }
  ]) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      id
      title
      content
      excerpt
      author {
        name
      }
      status
    }
  }
}

Argumentos

Todas las mutaciones masivas aceptan dos argumentos:

  • inputs (obligatorio): el array de elementos de entrada, donde cada elemento contiene los datos para mutar un recurso
  • stopExecutingMutationItemsOnFirstError (por defecto false): indica si, en caso de que alguno de los inputs produzca un error, debe detenerse la ejecución de la mutación en los siguientes inputs.

Todas las mutaciones se ejecutan en el mismo orden proporcionado en el argumento inputs.

Casos de uso

Las mutaciones masivas desbloquean posibilidades para gestionar nuestro sitio WordPress.

Por ejemplo, la siguiente consulta GraphQL utiliza createPosts para duplicar entradas:

query ExportPostData
{
  postsToDuplicate: posts {
    rawTitle
    rawContent
    rawExcerpt
    postInput: _echo(value: {
      title: $__rawTitle
      contentAs: {
        html: $__rawContent
      },
      excerpt: $__rawExcerpt
    })
      @export(as: "postInputs", type: LIST)
      @remove
  }
}
 
mutation CreatePosts
  @depends(on: "ExportPostData")
{
  createPosts(inputs: $postInputs) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      id
      title
      content
      excerpt
    }
  }
}