Field on Field
Direktif @applyField, untuk mengeksekusi field tertentu pada nilai field yang telah di-resolve.
Deskripsi
Diterapkan pada suatu field, direktif @applyField memungkinkan untuk mengeksekusi field lain (yang tersedia pada tipe yang sama dan diterapkan pada objek yang sama), dan baik meneruskan nilai hasil tersebut ke direktif lain, maupun menimpa nilai field tersebut.
Hal ini memungkinkan kita untuk memanipulasi nilai field dengan berbagai cara, menerapkan fungsionalitas yang disediakan melalui ekstensi PHP Functions via Schema, dan menyimpan hasil baru tersebut dalam respons.
Dalam query di bawah ini, field Post.title untuk objek tersebut memiliki nilai "Hello world!". Dengan menambahkan @applyField untuk mengeksekusi field _strUpperCase (dan mendahuluinya dengan @passOnwards, yang mengekspor nilai field di bawah $input yang dinamis):
{
post(by: { id: 1 }) {
title
@passOnwards(as: "input")
@applyField(
name: "_strUpperCase"
arguments: {
text: $input
},
setResultInResponse: true
)
}
}...nilai field diubah menjadi huruf kapital, menghasilkan:
{
"data": {
"post": {
"title": "HELLO WORLD!"
}
}
}Kita dapat menggabungkan beberapa @applyFunction, menggunakan respons dari satu sebagai input ke yang lain, sehingga melakukan beberapa operasi pada nilai field yang sama.
Dalam query di bawah ini, terdapat 2 operasi @applyFunction yang diterapkan:
- Mengubah menjadi huruf kapital, dan meneruskan nilai ke depan di bawah
$ucTitle - Mengganti
" "dengan"-"dan menimpa nilai field
{
post(by: { id: 1 }) {
title
@passOnwards(as: "input")
@applyField(
name: "_strUpperCase"
arguments: {
text: $input
},
passOnwardsAs: "ucTitle"
)
@applyField(
name: "_strReplace"
arguments: {
search: " ",
replaceWith: "-",
in: $ucTitle
},
setResultInResponse: true
)
}
}...menghasilkan:
{
"data": {
"post": {
"title": "HELLO-WORLD!"
}
}
}Contoh lebih lanjut
Mengambil nilai kebalikan dari apa yang disediakan oleh field:
{
posts {
id
notHasComments: hasComments
@passOnwards(as: "hasComments")
@applyField(
name: "_not",
arguments: {
value: $hasComments
},
setResultInResponse: true
)
}
}Bersama dengan ekstensi Data Iteration Meta Directives, memanipulasi semua item dalam sebuah array, mempersingkat masing-masing hingga tidak lebih dari 20 karakter:
{
posts {
categoryNames
@underEachArrayItem(passValueOnwardsAs: "categoryName")
@applyField(
name: "_strSubstr"
arguments: {
string: $categoryName,
offset: 0,
length: 20
},
setResultInResponse: true
)
}
}Bersama dengan ekstensi Data Iteration Meta Directives, mengubah item pertama dari sebuah array menjadi huruf kapital:
{
posts {
categoryNames
@underArrayItem(passOnwardsAs: "value", index: 0)
@applyField(
name: "_strUpperCase"
arguments: {
text: $value
},
setResultInResponse: true
)
}
}