Trường trên Trường
Chỉ thị @applyField, dùng để thực thi một trường nhất định trên giá trị đã được phân giải của trường.
Mô tả
Khi được áp dụng lên một trường, chỉ thị @applyField cho phép thực thi một trường khác (có sẵn trên cùng kiểu và được áp dụng trên cùng đối tượng), rồi hoặc là truyền giá trị kết quả đó cho một chỉ thị khác, hoặc là ghi đè giá trị của trường.
Điều này cho phép chúng ta thao tác giá trị của trường theo nhiều cách, áp dụng các chức năng được cung cấp qua tiện ích mở rộng PHP Functions via Schema, và lưu kết quả mới vào phản hồi.
Trong query bên dưới, trường Post.title của đối tượng có giá trị "Hello world!". Bằng cách thêm @applyField để thực thi trường _strUpperCase (và đặt trước nó @passOnwards, vốn xuất giá trị của trường dưới biến động $input):
{
post(by: { id: 1 }) {
title
@passOnwards(as: "input")
@applyField(
name: "_strUpperCase"
arguments: {
text: $input
},
setResultInResponse: true
)
}
}...giá trị trường được chuyển thành chữ hoa, tạo ra:
{
"data": {
"post": {
"title": "HELLO WORLD!"
}
}
}Chúng ta có thể nối nhiều @applyFunction, sử dụng phản hồi của lần này làm đầu vào cho lần tiếp theo, qua đó thực hiện nhiều thao tác trên cùng một giá trị trường.
Trong query bên dưới, có 2 thao tác @applyFunction được áp dụng:
- Chuyển thành chữ hoa và truyền giá trị tiếp theo dưới
$ucTitle - Thay
" "bằng"-"và ghi đè giá trị trường
{
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
)
}
}...tạo ra:
{
"data": {
"post": {
"title": "HELLO-WORLD!"
}
}
}Ví dụ thêm
Lấy giá trị ngược lại với giá trị mà trường cung cấp:
{
posts {
id
notHasComments: hasComments
@passOnwards(as: "hasComments")
@applyField(
name: "_not",
arguments: {
value: $hasComments
},
setResultInResponse: true
)
}
}Kết hợp với tiện ích mở rộng Data Iteration Meta Directives, thao tác tất cả các phần tử trong một mảng, rút ngắn mỗi phần tử xuống không quá 20 ký tự:
{
posts {
categoryNames
@underEachArrayItem(passValueOnwardsAs: "categoryName")
@applyField(
name: "_strSubstr"
arguments: {
string: $categoryName,
offset: 0,
length: 20
},
setResultInResponse: true
)
}
}Kết hợp với tiện ích mở rộng Data Iteration Meta Directives, chuyển phần tử đầu tiên của một mảng thành chữ hoa:
{
posts {
categoryNames
@underArrayItem(passOnwardsAs: "value", index: 0)
@applyField(
name: "_strUpperCase"
arguments: {
text: $value
},
setResultInResponse: true
)
}
}