Query Functions字段上的字段
字段上的字段
Included in the “Power Extensions” bundle
@applyField 指令,用于在已解析字段的值上执行特定字段。
描述
应用于某个字段时,@applyField 指令可以执行另一个字段(该字段在同一类型上可用,并应用于同一对象),并将结果值传递给另一个指令,或覆盖该字段的值。
这使我们能够通过 PHP Functions via Schema 扩展提供的功能,以多种方式操作字段的值,并将新结果存储到响应中。
在以下 query 中,对象的 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,将一个的响应作为另一个的输入,从而对同一字段值执行多个操作。
在以下 query 中,应用了 2 个 @applyFunction 操作:
- 转换为大写,并将值作为
$ucTitle传递给下一步 - 将
" "替换为"-"并覆盖字段值
{
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
)
}
}