Query Functions
Query FunctionsChamp sur Champ

Champ sur Champ

Included in the “Power Extensions” bundle

Directive @applyField, pour exécuter un certain champ sur la valeur résolue du champ.

Description

Appliquée à un certain champ, la directive @applyField permet d'exécuter un autre champ (disponible sur le même type et appliqué sur le même objet), puis soit de transmettre la valeur résultante à une autre directive, soit de remplacer la valeur du champ.

Cela nous permet de manipuler la valeur du champ de plusieurs façons, en appliquant une fonctionnalité fournie via l'extension PHP Functions via Schema, et en stockant le nouveau résultat dans la réponse.

Dans la requête ci-dessous, le champ Post.title pour l'objet a la valeur "Hello world!". En ajoutant @applyField pour exécuter le champ _strUpperCase (et en le faisant précéder de @passOnwards, qui exporte la valeur du champ sous la variable dynamique $input) :

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

...la valeur du champ est transformée en majuscules, produisant :

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

Nous pouvons enchaîner plusieurs @applyFunction, en utilisant la réponse de l'un comme entrée dans un autre, effectuant ainsi plusieurs opérations sur la même valeur de champ.

Dans la requête ci-dessous, 2 opérations @applyFunction sont appliquées :

  1. Transformer en majuscules, et transmettre la valeur sous $ucTitle
  2. Remplacer " " par "-" et remplacer la valeur du champ
{
  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
      )
  }
}

...produisant :

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

Autres exemples

Récupérer la valeur opposée à celle fournie par le champ :

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

Avec l'extension Data Iteration Meta Directives, manipuler tous les éléments d'un tableau, en raccourcissant chacun à 20 caractères maximum :

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

Avec l'extension Data Iteration Meta Directives, convertir le premier élément d'un tableau en majuscules :

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