Feld auf Feld
Direktive @applyField, um ein bestimmtes Feld auf den aufgelösten Wert des Feldes auszuführen.
Beschreibung
Auf ein bestimmtes Feld angewendet, ermöglicht die Direktive @applyField die Ausführung eines anderen Feldes (das auf demselben Typ verfügbar ist und auf dasselbe Objekt angewendet wird), und entweder den resultierenden Wert an eine andere Direktive weiterzuleiten oder den Wert des Feldes zu überschreiben.
Das ermöglicht es uns, den Wert des Feldes auf vielfältige Weise zu manipulieren, indem wir Funktionalität anwenden, die über die Erweiterung PHP Functions via Schema bereitgestellt wird, und das neue Ergebnis in der Antwort zu speichern.
In der folgenden query hat das Feld Post.title für das Objekt den Wert "Hello world!". Durch Hinzufügen von @applyField zur Ausführung des Feldes _strUpperCase (und dem vorangestellten @passOnwards, das den Feldwert unter der dynamischen Variable $input exportiert):
{
post(by: { id: 1 }) {
title
@passOnwards(as: "input")
@applyField(
name: "_strUpperCase"
arguments: {
text: $input
},
setResultInResponse: true
)
}
}...wird der Feldwert in Großbuchstaben umgewandelt, was folgendes ergibt:
{
"data": {
"post": {
"title": "HELLO WORLD!"
}
}
}Wir können mehrere @applyFunction verketten, indem wir die Antwort eines als Eingabe in einen anderen verwenden und so mehrere Operationen auf demselben Feldwert ausführen.
In der folgenden query werden 2 @applyFunction-Operationen angewendet:
- In Großbuchstaben umwandeln und den Wert unter
$ucTitleweitergeben " "durch"-"ersetzen und den Feldwert überschreiben
{
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
)
}
}...was folgendes ergibt:
{
"data": {
"post": {
"title": "HELLO-WORLD!"
}
}
}Weitere Beispiele
Den entgegengesetzten Wert zu dem abrufen, den das Feld liefert:
{
posts {
id
notHasComments: hasComments
@passOnwards(as: "hasComments")
@applyField(
name: "_not",
arguments: {
value: $hasComments
},
setResultInResponse: true
)
}
}Zusammen mit der Erweiterung Data Iteration Meta Directives alle Elemente eines Arrays manipulieren und jedes auf maximal 20 Zeichen kürzen:
{
posts {
categoryNames
@underEachArrayItem(passValueOnwardsAs: "categoryName")
@applyField(
name: "_strSubstr"
arguments: {
string: $categoryName,
offset: 0,
length: 20
},
setResultInResponse: true
)
}
}Zusammen mit der Erweiterung Data Iteration Meta Directives das erste Element eines Arrays in Großbuchstaben umwandeln:
{
posts {
categoryNames
@underArrayItem(passOnwardsAs: "value", index: 0)
@applyField(
name: "_strUpperCase"
arguments: {
text: $value
},
setResultInResponse: true
)
}
}