쿼리 함수
쿼리 함수필드 위의 필드

필드 위의 필드

Included in the “Power Extensions” bundle

@applyField 디렉티브는 해결된 필드의 값에 대해 특정 필드를 실행합니다.

설명

어떤 필드에 적용되면, @applyField 디렉티브는 다른 필드(동일한 타입에서 사용 가능하며 동일한 객체에 적용되는 필드)를 실행하고, 그 결과 값을 다른 디렉티브에 전달하거나 필드의 값을 덮어쓸 수 있습니다.

이를 통해 PHP Functions via Schema 확장 기능이 제공하는 기능을 적용하여 필드의 값을 다양한 방식으로 조작하고, 새로운 결과를 응답에 저장할 수 있습니다.

아래 쿼리에서 객체의 Post.title 필드 값은 "Hello world!"입니다. @applyField를 추가하여 _strUpperCase 필드를 실행하고(앞에 @passOnwards를 붙여 필드 값을 동적 $input으로 내보냅니다):

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

...필드의 값이 대문자로 변환되어 다음과 같은 결과가 생성됩니다:

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

여러 개의 @applyFunction을 연결하여 한쪽의 응답을 다른 쪽의 입력으로 사용함으로써 동일한 필드 값에 대해 여러 작업을 수행할 수 있습니다.

아래 쿼리에서는 2개의 @applyFunction 작업이 적용됩니다:

  1. 대문자로 변환하고 그 값을 $ucTitle로 다음에 전달
  2. " ""-"로 교체하여 필드 값을 덮어쓰기
{
  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
      )
  }
}

...다음과 같은 결과가 생성됩니다:

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

추가 예시

필드가 제공하는 값의 반대 값을 가져오기:

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

Data Iteration Meta Directives 확장 기능과 함께 배열의 모든 항목을 조작하여 각각 최대 20자로 단축하기:

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

Data Iteration Meta Directives 확장 기능과 함께 배열의 첫 번째 항목을 대문자로 변환하기:

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