Query Functions
Query FunctionsAlan Üzerinde Alan

Alan Üzerinde Alan

Included in the “Power Extensions” bundle

@applyField direktifi, çözümlenen alanın değeri üzerinde belirli bir alanı çalıştırmak için kullanılır.

Açıklama

Bir alana uygulandığında, @applyField direktifi başka bir alanı (aynı türde mevcut olan ve aynı nesne üzerinde 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.

Bu, PHP Functions via Schema eklentisi aracılığıyla sağlanan işlevselliği uygulayarak ve yeni sonucu yanıtta saklayarak alanın değerini pek çok şekilde değiştirmemize imkân verir.

Aşağıdaki query'de, nesne için Post.title alanının değeri "Hello world!" şeklindedir. _strUpperCase alanını çalıştırmak için @applyField eklendiğinde (ve önünde, alan değerini dinamik $input değişkeni altında dışa aktaran @passOnwards kullanıldığında):

{
  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!"
    }
  }
}

Birden fazla @applyFunction birleştirilebilir; birinin yanıtı diğerine girdi olarak kullanılır ve böylece aynı alan değeri üzerinde birden fazla işlem gerçekleştirilir.

Aşağıdaki query'de 2 @applyFunction işlemi uygulanmaktadır:

  1. Büyük harfe dönüştürme ve değeri $ucTitle altında iletme
  2. " " karakterini "-" ile değiştirme ve alan değerini geçersiz kılma
{
  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
      )
  }
}

...şu sonucu üretir:

{
  "data": {
    "post": {
      "title": "HELLO-WORLD!"
    }
  }
}

Daha fazla örnek

Alanın sağladığı değerin tersini alma:

{
  posts {
    id
    notHasComments: hasComments
      @passOnwards(as: "hasComments")
      @applyField(
        name: "_not",
        arguments: {
          value: $hasComments
        },
        setResultInResponse: true
      )
  }
}

Data Iteration Meta Directives eklentisiyle birlikte, bir dizideki tüm öğeleri değiştirerek her birini en fazla 20 karakter uzunluğuna kısaltma:

{
  posts {
    categoryNames
      @underEachArrayItem(passValueOnwardsAs: "categoryName")
        @applyField(
          name: "_strSubstr"
          arguments: {
            string: $categoryName,
            offset: 0,
            length: 20
          },
          setResultInResponse: true
        )
  }
}

Data Iteration Meta Directives eklentisiyle birlikte, bir dizinin ilk öğesini büyük harfe dönüştürme:

{
  posts {
    categoryNames
      @underArrayItem(passOnwardsAs: "value", index: 0)
        @applyField(
          name: "_strUpperCase"
          arguments: {
            text: $value
          },
          setResultInResponse: true
        )
  }
}