Veld op Veld
De @applyField-directive, om een bepaald veld uit te voeren op de waarde van het opgeloste veld.
Beschrijving
Toegepast op een bepaald veld, stelt de @applyField-directive je in staat om een ander veld uit te voeren (dat beschikbaar is op hetzelfde type en toegepast wordt op hetzelfde object), en de resulterende waarde door te geven aan een andere directive, of de waarde van het veld te overschrijven.
Dit stelt ons in staat de waarde van het veld op meerdere manieren te manipuleren, door functionaliteit toe te passen die beschikbaar is via de PHP Functions via Schema-extensie, en het nieuwe resultaat op te slaan in de respons.
In de onderstaande query heeft het veld Post.title voor het object de waarde "Hello world!". Door @applyField toe te voegen om het veld _strUpperCase uit te voeren (voorafgegaan door @passOnwards, dat de veldwaarde exporteert onder de dynamische variabele $input):
{
post(by: { id: 1 }) {
title
@passOnwards(as: "input")
@applyField(
name: "_strUpperCase"
arguments: {
text: $input
},
setResultInResponse: true
)
}
}...wordt de veldwaarde omgezet naar hoofdletters, met als resultaat:
{
"data": {
"post": {
"title": "HELLO WORLD!"
}
}
}We kunnen meerdere @applyFunction-aanroepen aan elkaar koppelen, waarbij de respons van de ene als invoer voor de volgende wordt gebruikt, zodat meerdere bewerkingen op dezelfde veldwaarde worden uitgevoerd.
In de onderstaande query worden 2 @applyFunction-bewerkingen toegepast:
- Omzetten naar hoofdletters en de waarde doorgeven onder
$ucTitle " "vervangen door"-"en de veldwaarde overschrijven
{
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
)
}
}...met als resultaat:
{
"data": {
"post": {
"title": "HELLO-WORLD!"
}
}
}Verdere voorbeelden
Haal de tegengestelde waarde op van wat het veld levert:
{
posts {
id
notHasComments: hasComments
@passOnwards(as: "hasComments")
@applyField(
name: "_not",
arguments: {
value: $hasComments
},
setResultInResponse: true
)
}
}Samen met de Data Iteration Meta Directives-extensie, alle items in een array manipuleren en elk inkorten tot maximaal 20 tekens:
{
posts {
categoryNames
@underEachArrayItem(passValueOnwardsAs: "categoryName")
@applyField(
name: "_strSubstr"
arguments: {
string: $categoryName,
offset: 0,
length: 20
},
setResultInResponse: true
)
}
}Samen met de Data Iteration Meta Directives-extensie, het eerste item van een array omzetten naar hoofdletters:
{
posts {
categoryNames
@underArrayItem(passOnwardsAs: "value", index: 0)
@applyField(
name: "_strUpperCase"
arguments: {
text: $value
},
setResultInResponse: true
)
}
}