レッスン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 拡張機能を通じて提供されます。
適用されたスキーマ設定とプラグインの設定を通じて、クエリできる定数や環境変数を設定することができます。