레슨 2: 동적 데이터 쿼리
Gato GraphQL은 "함수" 필드(데이터 대신 기능을 제공하는 독자적인 유형의 필드)를 사용하여 WordPress의 데이터 검색 기능을 더욱 확장할 수 있으며, 데이터를 동적으로 계산하고 쿼리에 다시 입력하여 세밀한 제어로 응답에 영향을 줄 수 있습니다.
예시
Gato GraphQL은 글로벌 필드라는 개념 아래 함수 필드를 제공합니다. 글로벌 필드란 GraphQL 스키마의 모든 타입에서 접근할 수 있는 필드입니다. (반면 GraphQL의 일반 필드는 Post나 User와 같은 특정 타입에서만 접근할 수 있습니다.)
관례적으로 Gato GraphQL의 글로벌 필드는 _로 시작합니다(일반 필드는 그렇지 않습니다).
PHP Functions Via Schema 확장 기능은 가장 일반적인 PHP 함수 중 많은 것을 글로벌 필드로 제공합니다. 포함된 항목은 다음과 같습니다:
_arrayItem_arrayJoin_date_equals_inArray_intAdd_isEmpty_isNull_makeTime_objectProperty_sprintf_strContains_strRegexReplace_strSubstr_time,- 그 외 다수...
동적으로 생성된 데이터를 만들고, 이를 필터에 입력하여 게시물, 댓글 등을 가져올 수 있습니다.
이 쿼리는 "현재 시간에서 86400초를 뺀 시간"으로 계산된, 지난 24시간 내에 사이트에 추가된 댓글 수를 가져옵니다:
query {
timeNow: _time
time24HsAgo: _intSubtract(
subtract: 86400,
from: $__timeNow
)
date24HsAgo: _date(
format: "Y-m-d\\TH:i:sO",
timestamp: $__time24HsAgo
)
commentsAddedInLast24Hs: commentCount(
filter: {
dateQuery: {
after: $__date24HsAgo
}
}
)
}$__timeNow는 Field to Input 확장 기능에 의해 동적으로 생성되는 변수입니다. 이 확장 기능을 사용하면 필드의 값을 가져와 동일한 오퍼레이션 내의 다른 필드에 입력할 수 있습니다.
값을 가져올 필드는 "변수" 구문 $와 필드 별칭 또는 이름 앞에 __를 붙여 참조합니다:
{
posts {
excerpt
# Referencing previous field with name "excerpt"
isEmptyExcerpt: _isEmpty(value: $__excerpt)
# Referencing previous field with alias "isEmptyExcerpt"
isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
}
}이 쿼리는 "24시간 전", "1년 전", "이번 달 초", "올해 초"부터 사이트에 추가된 댓글 수를 가져옵니다:
query {
timeNow: _time
time24HsAgo: _intSubtract(subtract: 86400, from: $__timeNow)
date24HsAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time24HsAgo)
time1YearAgo: _intSubtract(subtract: 31536000, from: $__timeNow)
date1YearAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time1YearAgo)
timeBegOfThisMonth: _makeTime(hour: 0, minute: 0, second: 0, day: 1)
dateBegOfThisMonth: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__timeBegOfThisMonth)
timeBegOfThisYear: _makeTime(hour: 0, minute: 0, second: 0, month: 1, day: 1)
dateBegOfThisYear: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__timeBegOfThisYear)
commentsAddedInLast24Hs: commentCount(filter: { dateQuery: { after: $__date24HsAgo } } )
commentsAddedInLast1Year: commentCount(filter: { dateQuery: { after: $__date1YearAgo } } )
commentsAddedSinceBegOfThisMonth: commentCount(filter: { dateQuery: { after: $__dateBegOfThisMonth } } )
commentsAddedSinceBegOfThisYear: commentCount(filter: { dateQuery: { after: $__dateBegOfThisYear } } )
}이 쿼리는 이전 쿼리와 동일하지만, PHP 상수 DATE_ISO8601에서 표준화된 시간 형식 "Y-m-d\\TH:i:sO"를 가져옵니다:
query {
# This PHP constant will provide standard time format "Y-m-d\\TH:i:sO"
DATE_ISO8601: _env(name: DATE_ISO8601)
timeNow: _time
time24HsAgo: _intSubtract(
subtract: 86400,
from: $__timeNow
)
date24HsAgo: _date(
format: $__DATE_ISO8601,
timestamp: $__time24HsAgo
)
}필드 _env는 PHP Constants and Environment Variables via Schema 확장 기능을 통해 제공됩니다.
적용된 스키마 설정과 플러그인 설정을 통해 쿼리할 수 있는 상수 및 환경 변수를 구성할 수 있습니다.