Pelajaran 2: Query data dinamis
Gato GraphQL dapat lebih jauh memperluas kemampuan WordPress untuk mencari data melalui penggunaan field "fungsi" (jenis field tersendiri yang menyediakan fungsionalitas alih-alih data), memungkinkan kita menghitung data secara dinamis, memasukkannya kembali ke dalam query, dan mempengaruhi respons dengan kontrol yang granular.
Contoh
Gato GraphQL menyediakan field fungsi di bawah konsep Global fields: Field yang dapat diakses di semua tipe dari skema GraphQL. (Field normal di GraphQL, sebaliknya, hanya dapat diakses di bawah tipe tertentu, seperti Post atau User).
Berdasarkan konvensi, global field di Gato GraphQL dimulai dengan _ (dan field normal tidak).
Ekstensi PHP Functions Via Schema menyediakan banyak fungsi PHP yang paling umum sebagai global field, termasuk:
_arrayItem_arrayJoin_date_equals_inArray_intAdd_isEmpty_isNull_makeTime_objectProperty_sprintf_strContains_strRegexReplace_strSubstr_time,- Dan masih banyak lagi...
Kita dapat membuat data yang dihasilkan secara dinamis, dan memasukkannya ke dalam filter untuk mengambil post, komentar, dan lain-lain.
Query ini mengambil jumlah komentar yang ditambahkan ke situs dalam 24 jam terakhir, yang dihitung sebagai "waktu sekarang dikurangi 86400 detik":
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 adalah variabel yang dibuat secara dinamis oleh ekstensi Field to Input, yang memungkinkan kita mendapatkan nilai sebuah field dan memasukkannya ke field lain dalam operasi yang sama.
Field yang nilainya akan diambil direferensikan menggunakan sintaks "Variable" $, dan __ sebelum alias atau nama field:
{
posts {
excerpt
# Referencing previous field with name "excerpt"
isEmptyExcerpt: _isEmpty(value: $__excerpt)
# Referencing previous field with alias "isEmptyExcerpt"
isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
}
}Query ini mengambil jumlah komentar yang ditambahkan ke situs mulai dari "24 jam yang lalu", "1 tahun yang lalu", "awal bulan ini", dan "awal tahun ini":
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 } } )
}Query ini sama dengan yang sebelumnya, namun mengambil format waktu standar "Y-m-d\\TH:i:sO" dari konstanta PHP DATE_ISO8601:
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
)
}Field _env disediakan melalui ekstensi PHP Constants and Environment Variables via Schema.
Melalui Schema Configuration yang diterapkan dan pengaturan plugin, kita dapat mengonfigurasi konstanta dan variabel lingkungan mana yang dapat di-query.