Query Functions
Query FunctionsCampo su Campo

Campo su Campo

Included in the “Power Extensions” bundle

Direttiva @applyField, per eseguire un determinato campo sul valore risolto del campo.

Descrizione

Applicata a un determinato campo, la direttiva @applyField consente di eseguire un altro campo (disponibile sullo stesso tipo e applicato sullo stesso oggetto), e poi di trasmettere il valore risultante a un'altra direttiva, oppure di sostituire il valore del campo.

Questo ci permette di manipolare il valore del campo in molti modi, applicando una funzionalità fornita tramite l'estensione PHP Functions via Schema, e memorizzando il nuovo risultato nella risposta.

Nella query qui sotto, il campo Post.title per l'oggetto ha valore "Hello world!". Aggiungendo @applyField per eseguire il campo _strUpperCase (e facendolo precedere da @passOnwards, che esporta il valore del campo sotto la variabile dinamica $input):

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

...il valore del campo viene trasformato in maiuscolo, producendo:

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

Possiamo concatenare più @applyFunction, usando la risposta di uno come input in un altro, eseguendo così più operazioni sullo stesso valore di campo.

Nella query qui sotto, vengono applicate 2 operazioni @applyFunction:

  1. Trasformare in maiuscolo, e trasmettere il valore sotto $ucTitle
  2. Sostituire " " con "-" e sostituire il valore del campo
{
  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
      )
  }
}

...producendo:

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

Altri esempi

Recuperare il valore opposto a quello fornito dal campo:

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

Insieme all'estensione Data Iteration Meta Directives, manipolare tutti gli elementi di un array, accorciando ciascuno a un massimo di 20 caratteri:

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

Insieme all'estensione Data Iteration Meta Directives, convertire il primo elemento di un array in maiuscolo:

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