Schema 教程第2课:查询动态数据
第2课:查询动态数据
Gato GraphQL 通过使用"函数"字段(一种提供功能而非数据的特殊字段类型),可以进一步增强 WordPress 的数据检索能力,使我们能够动态计算数据,将其重新输入到 Query 中,并对响应进行精细控制。
示例
Gato GraphQL 以全局字段的概念提供函数字段:这些字段可在 GraphQL schema 的所有类型下访问。(相比之下,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,- 以及更多...
我们可以创建动态生成的数据,并将其输入到过滤器中以获取文章、评论等内容。
此 Query 检索过去 24 小时内添加到站点的评论数,计算方式为"当前时间减去 86400 秒":
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)
}
}此 Query 检索从"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 } } )
}此 Query 与前一个相同,但它从 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 扩展提供。
通过应用的 Schema 配置和插件设置,我们可以配置哪些常量和环境变量可以被查询。
Next