Query Functions
GraphQL sorgusu içindeki alanların değerlerini, meta-programlama yetenekleri sağlayan bir yardımcı program ve özel direktif koleksiyonu aracılığıyla değiştirin.

Click to watch tutorial video - 12:09
GraphQL sorgusu içindeki alanların değerlerini, meta-programlama yetenekleri sağlayan bir yardımcı program ve özel direktif koleksiyonu aracılığıyla değiştirin.
Field to Input
Bir alanın değerini alın, değiştirin ve aynı sorgu içinde başka bir alana girdi olarak aktarın.
query {
posts {
excerpt
# Referencing previous field with name "excerpt"
isEmptyExcerpt: _isEmpty(value: $__excerpt)
# Referencing previous field with alias "isEmptyExcerpt"
isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
}
}Alan Değeri Yineleme ve Değiştirme
Dizi ve nesne alanlarının değer öğelerini yinelemek ve değiştirmek için GraphQL şemasına meta direktifler ekleme:
@underArrayItem@underJSONObjectProperty@underEachArrayItem@underEachJSONObjectProperty@objectClone
@underArrayItem, iç içe direktifin diziden belirli bir öğeye uygulanmasını sağlar.
Aşağıdaki sorguda, kategori adlarını içeren dizideki yalnızca ilk öğe büyük harfe dönüştürülür:
query {
posts {
categoryNames
@underArrayItem(index: 0)
@strUpperCase
}
}...şu sonucu üretir:
{
"data": {
"posts": {
"categoryNames": [
"NEWS",
"sports"
]
}
}
}Alan Üzerinde Alan
Çözümlenen alanın değeri üzerinde belirli bir alanı çalıştırmak için @applyField direktifi ekleme.
Bir alana uygulandığında, @applyField direktifi başka bir alanı (aynı tür üzerinde mevcut olan ve aynı nesneye uygulanan) çalıştırmanıza ve elde edilen değeri başka bir direktife iletmenize ya da alanın değerini geçersiz kılmanıza olanak tanır.
Aşağıdaki sorguda, nesne için Post.title alanının değeri "Hello world!" şeklindedir. _strUpperCase alanını çalıştırmak için @applyField ekleyerek:
{
post(by: { id: 1 }) {
title
@passOnwards(as: "input")
@applyField(
name: "_strUpperCase"
arguments: {
text: $input
},
setResultInResponse: true
)
}
}...alan değeri büyük harfe dönüştürülür ve şu sonuç üretilir:
{
"data": {
"post": {
"title": "HELLO WORLD!"
}
}
}Koşullu Alan Değiştirme
Alan üzerinde iç içe bir direktifi koşullu olarak çalıştırmak için GraphQL şemasına @if ve @unless meta direktifleri ekleme.
@if, iç içe direktiflerini yalnızca bir koşulun değeri true olduğunda çalıştırır.
Bu sorguda, "Leo" ve "Peter" kullanıcıları "özel kullanıcı" dizisinde bulundukları için adları büyük harfe dönüştürülürken "Martin" dönüştürülmez:
query {
users {
name
@passOnwards(as: "userName")
@applyField(
name: "_inArray"
arguments: {
value: $userName
array: ["Leo", "John", "Peter"]
}
passOnwardsAs: "isSpecialUser"
)
@if(
condition: $isSpecialUser
)
@strUpperCase
}
}...şu sonucu üretir:
{
"data": {
"users": [
{
"name": "LEO"
},
{
"name": "Martin"
},
{
"name": "PETER"
}
]
}
}Alan Varsayılan Değeri
Null veya boş alanlara bir değer atamak için @default direktifi ekleme.
Aşağıdaki örnekte, bir gönderinin öne çıkan görseli olmadığında featuredImage alanı null döndürür:
{
post(by: { id: 1 }) {
featuredImage {
id
src
}
}
}{
"data": {
"post": {
"featuredImage": null
}
}
}@default kullanarak varsayılan bir görsel alabiliriz:
{
post(by: { id: 1 }) {
featuredImage @default(value: 55) {
id
src
}
}
}{
"data": {
"post": {
"featuredImage": {
"id": 55,
"src": "http://mysite.com/wp-content/uploads/my-default-image.webp"
}
}
}
}Yanıttan Alan Kaldırma
GraphQL şemasına @remove direktifi ekleme; bu direktif bir alanın çıktısını yanıttan kaldırır.
Aşağıdaki sorguda, site alan adını ve REST API uç noktasını birleştirerek HTTP isteği göndermek için URL oluştururuz. Bu bileşenlerin değerleri bizim için önemli olmadığından yanıtta gösterilmesi gerekmez ve @remove ile kaldırabiliriz:
query {
siteURL: optionValue(name: "siteurl")
@remove
requestURL: _sprintf(
string: "%s/wp-json/wp/v2/comments/11/?_fields=id,content,date",
values: [$__siteURL]
)
@remove
_sendJSONObjectItemHTTPRequest(
input: {
url: $__requestURL
}
)
}...şu yanıtı üretir (siteURL ve requestURL alanlarının kaldırıldığına dikkat edin):
{
"data": {
"_sendJSONObjectItemHTTPRequest": {
"id": 11,
"date": "2020-12-12T04:07:36",
"content": {
"rendered": "<p>Btw, I really like this stuff<\/p>\n"
}
}
}
}Yanıt Hata Tetikleyicisi
GraphQL şemasına, yanıttaki errors özelliğine açıkça bir giriş eklemek için _fail global alanı ve @fail direktifi ile warnings özelliğine bir giriş eklemek için _warn global alanı ve @warn direktifi ekleme.
_fail alanı hatayı her zaman ekler; @fail direktifi ise condition bağımsız değişkenindeki koşul karşılandığında ekler:
query {
_fail(message: "Some error")
posts {
featuredImage @fail(
condition: IS_NULL,
message: "The post does not have a featured image"
) {
id
src
}
}
users {
name @fail(
condition: IS_EMPTY,
message: "The retrieved user does not have a name"
)
}
}