Les 2: Dynamische gegevens opvragen
Gato GraphQL kan de mogelijkheden van WordPress voor het zoeken van gegevens verder uitbreiden via het gebruik van "functie"-velden (een afzonderlijk type veld dat functionaliteit biedt in plaats van gegevens), waarmee we gegevens dynamisch kunnen berekenen, ze terug in de query kunnen invoeren en de respons met nauwkeurige controle kunnen beïnvloeden.
Voorbeelden
Gato GraphQL biedt functievelden onder het concept van Globale velden: velden die toegankelijk zijn onder alle typen van het GraphQL-schema. (Gewone velden in GraphQL zijn daarentegen alleen toegankelijk onder een specifiek type, zoals Post of User).
Volgens afspraak beginnen globale velden in Gato GraphQL met _ (en gewone velden niet).
De PHP Functions Via Schema-extensie biedt veel van de meest voorkomende PHP-functies als globale velden, waaronder:
_arrayItem_arrayJoin_date_equals_inArray_intAdd_isEmpty_isNull_makeTime_objectProperty_sprintf_strContains_strRegexReplace_strSubstr_time,- En nog veel meer...
We kunnen dynamisch gegenereerde gegevens aanmaken en ze in een filter invoeren om posts, reacties, enz. op te halen.
Deze query haalt het aantal reacties op dat de afgelopen 24 uur aan de site is toegevoegd, berekend als "huidige tijd min 86400 seconden":
query {
timeNow: _time
time24HsAgo: _intSubtract(
subtract: 86400,
from: $__timeNow
)
date24HsAgo: _date(
format: "Y-m-d\\TH:i:sO",
timestamp: $__time24HsAgo
)
commentsAddedInLast24Hs: commentCount(
filter: {
dateQuery: {
after: $__date24HsAgo
}
}
)
}$__timeNow is een variabele die dynamisch wordt aangemaakt door de Field to Input-extensie, waarmee we de waarde van een veld kunnen ophalen en in een ander veld kunnen invoeren binnen dezelfde operatie.
Het veld waarvan je de waarde wilt ophalen, wordt gerefereerd met de "Variable"-syntaxis $, en __ vóór de veldalias of -naam:
{
posts {
excerpt
# Referencing previous field with name "excerpt"
isEmptyExcerpt: _isEmpty(value: $__excerpt)
# Referencing previous field with alias "isEmptyExcerpt"
isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
}
}Deze query haalt het aantal reacties op dat aan de site is toegevoegd vanaf "24 uur geleden", "1 jaar geleden", "het begin van de maand" en "het begin van het jaar":
query {
timeNow: _time
time24HsAgo: _intSubtract(subtract: 86400, from: $__timeNow)
date24HsAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time24HsAgo)
time1YearAgo: _intSubtract(subtract: 31536000, from: $__timeNow)
date1YearAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time1YearAgo)
timeBegOfThisMonth: _makeTime(hour: 0, minute: 0, second: 0, day: 1)
dateBegOfThisMonth: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__timeBegOfThisMonth)
timeBegOfThisYear: _makeTime(hour: 0, minute: 0, second: 0, month: 1, day: 1)
dateBegOfThisYear: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__timeBegOfThisYear)
commentsAddedInLast24Hs: commentCount(filter: { dateQuery: { after: $__date24HsAgo } } )
commentsAddedInLast1Year: commentCount(filter: { dateQuery: { after: $__date1YearAgo } } )
commentsAddedSinceBegOfThisMonth: commentCount(filter: { dateQuery: { after: $__dateBegOfThisMonth } } )
commentsAddedSinceBegOfThisYear: commentCount(filter: { dateQuery: { after: $__dateBegOfThisYear } } )
}Deze query is hetzelfde als de vorige, maar haalt het gestandaardiseerde tijdformaat "Y-m-d\\TH:i:sO" op uit de PHP-constante DATE_ISO8601:
query {
# This PHP constant will provide standard time format "Y-m-d\\TH:i:sO"
DATE_ISO8601: _env(name: DATE_ISO8601)
timeNow: _time
time24HsAgo: _intSubtract(
subtract: 86400,
from: $__timeNow
)
date24HsAgo: _date(
format: $__DATE_ISO8601,
timestamp: $__time24HsAgo
)
}Veld _env wordt aangeboden via de PHP Constants and Environment Variables via Schema-extensie.
Via de toegepaste Schema-configuratie en plugin-instellingen kunnen we instellen welke constanten en omgevingsvariabelen kunnen worden opgevraagd.