Usar mutaciones anidadas
Las mutaciones anidadas permiten realizar mutaciones en un tipo distinto al tipo raíz en GraphQL.
La consulta de abajo ejecuta una mutación estándar, utilizando el campo de mutación updatePost desde el tipo raíz:
mutation {
updatePost(input: {
id: 5,
title: "New title"
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
title
}
}
}La consulta de arriba también puede ejecutarse mediante una mutación anidada, donde el objeto post se consulta primero mediante el campo post, y luego el campo de mutación update, que pertenece al tipo Post, se aplica sobre el objeto post:
mutation {
post(by: {id: 5}) {
update(input: {
title: "New title"
}) {
status
post {
title
}
}
}
}Las mutaciones también pueden anidarse, modificando datos sobre el resultado de otra mutación:
mutation {
createPost(input: {
title: "First title"
}) {
status
postID
post {
update(input: {
title: "Second title",
contentAs: { html: "Some content" }
}) {
status
post {
title
content
addComment(input: {
commentAs: { html: "My first comment" }
}) {
status
commentID
comment {
content
date
}
}
}
}
}
}
}Tipo raíz simplificado
Las mutaciones anidadas cambian el tipo raíz, de QueryRoot y MutationRoot, a un único tipo Root que gestiona tanto consultas como mutaciones:

Visualizar los campos de mutación
Utiliza el cliente Voyager para visualizar cuáles son los campos de mutación.
Con mutaciones anidadas, cada tipo en el esquema puede contener tanto campos de consulta como de mutación. Para diferenciarlos, la descripción del campo de mutación va precedida de la etiqueta "[Mutation] ".
Por ejemplo, estos son los campos para el tipo Root:

Usar mutaciones anidadas en los endpoints
Hay 2 niveles en los que podemos definir si el esquema utilizará mutaciones anidadas o no. Por orden de prioridad:
1. En la configuración del esquema
Hacer que un custom endpoint o persisted query use mutaciones anidadas, puede definirse mediante la correspondiente configuración del esquema:

2. Modo por defecto, definido en los Ajustes
Si la configuración del esquema tiene el valor "Default", utilizará el modo definido en los Ajustes:

Configurar mutaciones anidadas
Hay tres comportamientos que podemos elegir para el esquema:
1. No habilitar mutaciones anidadas
Esta opción deshabilita las mutaciones anidadas (utilizando el comportamiento estándar en su lugar) para el esquema.
2. Habilitar mutaciones anidadas, manteniendo todos los campos de mutación en la raíz
Cuando las mutaciones anidadas están habilitadas, los campos de mutación pueden añadirse dos veces al esquema:
- una vez bajo el tipo
Root - una vez bajo el tipo específico
Por ejemplo:
Root.updatePostPost.update
Con esta opción, los campos de mutación "duplicados" del tipo raíz se mantienen.
3. Habilitar mutaciones anidadas, eliminando los campos de mutación redundantes de la raíz
La misma opción que arriba, pero eliminando los campos de mutación "duplicados" del tipo raíz.
Por ejemplo:
Root.updatePostse eliminaPost.updateestá disponible
Especificación de GraphQL
Esta funcionalidad no forma parte actualmente de la especificación GraphQL, pero ha sido solicitada: