Menggunakan nested mutations
Nested mutations memungkinkan untuk melakukan mutations pada tipe selain tipe root dalam GraphQL.
Query di bawah ini mengeksekusi mutation standar, menggunakan field mutation updatePost dari tipe root:
mutation {
updatePost(input: {
id: 5,
title: "New title"
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
title
}
}
}Query di atas juga dapat dieksekusi melalui nested mutation, di mana objek post pertama-tama di-query melalui field post, kemudian field mutation update, yang termasuk dalam tipe Post, diterapkan pada objek post tersebut:
mutation {
post(by: {id: 5}) {
update(input: {
title: "New title"
}) {
status
post {
title
}
}
}
}Mutations juga dapat bersarang, memodifikasi data pada hasil dari mutation lain:
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
}
}
}
}
}
}
}Tipe root yang disederhanakan
Nested mutations mengubah tipe root, dari QueryRoot dan MutationRoot, menjadi satu tipe Root tunggal yang menangani baik queries maupun mutations:

Memvisualisasikan field mutation
Gunakan klien Voyager untuk memvisualisasikan field-field mutation.
Dengan nested mutations, setiap tipe dalam skema dapat mengandung field query maupun mutation. Untuk membedakannya, deskripsi field mutation diawali dengan label "[Mutation] ".
Misalnya, berikut adalah field-field untuk tipe Root:

Menggunakan nested mutations di endpoint
Ada 2 level di mana kita dapat menentukan apakah skema akan menggunakan nested mutations atau tidak. Berdasarkan urutan prioritas:
1. Pada konfigurasi skema
Membuat custom endpoint atau persisted query menggunakan nested mutations dapat didefinisikan melalui konfigurasi skema yang sesuai:

2. Mode default, didefinisikan di Pengaturan
Jika konfigurasi skema memiliki nilai "Default", maka akan menggunakan mode yang didefinisikan di Pengaturan:

Mengonfigurasi nested mutations
Ada tiga perilaku yang dapat kita pilih untuk skema:
1. Tidak mengaktifkan nested mutations
Opsi ini menonaktifkan nested mutations (menggunakan perilaku standar sebagai gantinya) untuk skema.
2. Aktifkan nested mutations, pertahankan semua field mutation di root
Ketika nested mutations diaktifkan, field mutation dapat ditambahkan dua kali ke dalam skema:
- sekali di bawah tipe
Root - sekali di bawah tipe spesifik
Misalnya:
Root.updatePostPost.update
Dengan opsi ini, field mutation yang "terduplikasi" dari tipe root tetap dipertahankan.
3. Aktifkan nested mutations, hapus field mutation yang redundan dari root
Opsi yang sama seperti di atas, tetapi menghapus field mutation yang "terduplikasi" dari tipe root.
Misalnya:
Root.updatePostdihapusPost.updatetersedia
Spesifikasi GraphQL
Fungsionalitas ini saat ini bukan bagian dari spesifikasi GraphQL, namun telah diminta: