Query Functions
Query FunctionsPole na Polu

Pole na Polu

Included in the “Power Extensions” bundle

Dyrektywa @applyField, służąca do wykonania określonego pola na wartości rozwiązanego pola.

Opis

Zastosowana do określonego pola dyrektywa @applyField pozwala wykonać inne pole (dostępne dla tego samego typu i stosowane na tym samym obiekcie), a następnie przekazać wynikową wartość do innej dyrektywy lub nadpisać wartość pola.

Pozwala to manipulować wartością pola na wiele sposobów, stosując funkcjonalności udostępniane przez rozszerzenie PHP Functions via Schema i zapisując nowy wynik w odpowiedzi.

W poniższej query pole Post.title dla obiektu ma wartość "Hello world!". Dodając @applyField w celu wykonania pola _strUpperCase (poprzedzonego dyrektywą @passOnwards, która eksportuje wartość pola pod dynamiczną zmienną $input):

{
  post(by: { id: 1 }) {
    title
      @passOnwards(as: "input")
      @applyField(
        name: "_strUpperCase"
        arguments: {
          text: $input
        },
        setResultInResponse: true
      )
  }
}

...wartość pola zostaje przekształcona na wielkie litery, co daje:

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

Możemy łączyć wiele @applyFunction, używając odpowiedzi z jednego jako wejścia do drugiego, wykonując w ten sposób wiele operacji na tej samej wartości pola.

W poniższej query zastosowane są 2 operacje @applyFunction:

  1. Przekształć na wielkie litery i przekaż wartość dalej pod $ucTitle
  2. Zastąp " " przez "-" i nadpisz wartość pola
{
  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
      )
  }
}

...co daje:

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

Dalsze przykłady

Pobierz wartość przeciwną do tej, którą dostarcza pole:

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

Wraz z rozszerzeniem Data Iteration Meta Directives, manipuluj wszystkimi elementami tablicy, skracając każdy do maksymalnie 20 znaków:

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

Wraz z rozszerzeniem Data Iteration Meta Directives, przekształć pierwszy element tablicy na wielkie litery:

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