Pole na Polu
Dyrektywa @applyField, służąca do wykonania określonego pola na wartości rozwiązanego pola.
Opis
Zastosowana do określonego pola dyrektywa @applyField pozwala wykonać inne pole (dostępne dla tego samego typu i stosowane na tym samym obiekcie), a następnie przekazać wynikową wartość do innej dyrektywy lub nadpisać wartość pola.
Pozwala to manipulować wartością pola na wiele sposobów, stosując funkcjonalności udostępniane przez rozszerzenie PHP Functions via Schema i zapisując nowy wynik w odpowiedzi.
W poniższej query pole Post.title dla obiektu ma wartość "Hello world!". Dodając @applyField w celu wykonania pola _strUpperCase (poprzedzonego dyrektywą @passOnwards, która eksportuje wartość pola pod dynamiczną zmienną $input):
{
post(by: { id: 1 }) {
title
@passOnwards(as: "input")
@applyField(
name: "_strUpperCase"
arguments: {
text: $input
},
setResultInResponse: true
)
}
}...wartość pola zostaje przekształcona na wielkie litery, co daje:
{
"data": {
"post": {
"title": "HELLO WORLD!"
}
}
}Możemy łączyć wiele @applyFunction, używając odpowiedzi z jednego jako wejścia do drugiego, wykonując w ten sposób wiele operacji na tej samej wartości pola.
W poniższej query zastosowane są 2 operacje @applyFunction:
- Przekształć na wielkie litery i przekaż wartość dalej pod
$ucTitle - Zastąp
" "przez"-"i nadpisz wartość pola
{
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
)
}
}...co daje:
{
"data": {
"post": {
"title": "HELLO-WORLD!"
}
}
}Dalsze przykłady
Pobierz wartość przeciwną do tej, którą dostarcza pole:
{
posts {
id
notHasComments: hasComments
@passOnwards(as: "hasComments")
@applyField(
name: "_not",
arguments: {
value: $hasComments
},
setResultInResponse: true
)
}
}Wraz z rozszerzeniem Data Iteration Meta Directives, manipuluj wszystkimi elementami tablicy, skracając każdy do maksymalnie 20 znaków:
{
posts {
categoryNames
@underEachArrayItem(passValueOnwardsAs: "categoryName")
@applyField(
name: "_strSubstr"
arguments: {
string: $categoryName,
offset: 0,
length: 20
},
setResultInResponse: true
)
}
}Wraz z rozszerzeniem Data Iteration Meta Directives, przekształć pierwszy element tablicy na wielkie litery:
{
posts {
categoryNames
@underArrayItem(passOnwardsAs: "value", index: 0)
@applyField(
name: "_strUpperCase"
arguments: {
text: $value
},
setResultInResponse: true
)
}
}