Sử dụng chỉ thị đa trường
Chỉ thị đa trường là một chỉ thị có thể được áp dụng cho nhiều trường thay vì chỉ một trường duy nhất. Khi được bật, một đối số affectAdditionalFieldsUnderPos sẽ được thêm vào tất cả các chỉ thị, cho phép chỉ định vị trí tương đối của các trường bổ sung mà chỉ thị sẽ được áp dụng.
Ví dụ, trong query sau đây, chỉ thị @strTranslate chỉ được áp dụng cho trường content:
{
posts {
excerpt
content @strTranslate
}
}Trường excerpt cũng có thể được áp dụng chỉ thị @strTranslate, bằng cách thêm đối số affectAdditionalFieldsUnderPos với giá trị [1] (vì 1 là vị trí tương đối của trường excerpt so với chỉ thị @strTranslate):
{
posts {
excerpt
content
@strTranslate(
affectAdditionalFieldsUnderPos: [1]
)
}
}Số lượng trường được thêm vào không bị giới hạn. Trong query này, dateStr cũng được dịch:
{
posts {
dateStr
excerpt
content
@strTranslate(
affectAdditionalFieldsUnderPos: [1, 2]
)
}
}Trường mà chỉ thị được áp dụng tự nhiên (chẳng hạn như content trong tất cả các queries ở trên) không cần được chỉ định trong đối số.
Trong query trên, các vị trí tương đối từ chỉ thị @strTranslate đến các trường trước đó là:
- Vị trí
2:dateStr - Vị trí
1:excerpt - Vị trí
0:content<= Ngầm định, luôn được áp dụng
Các trường hợp sử dụng
Có hai trường hợp sử dụng chính cho tính năng này:
- Hiệu suất
- Chức năng mở rộng
Hiệu suất
Đối với các chỉ thị thực hiện lời gọi đến API bên ngoài, số lượng yêu cầu càng ít thì chúng sẽ được xử lý càng nhanh.
Đó là trường hợp của chỉ thị @strTranslate, kết nối đến Google Translate API. Thông thường, để dịch các trường content và excerpt từ danh sách các bài đăng, query sẽ như sau:
query {
posts {
excerpt @strTranslate
content @strTranslate
}
}Bằng cách thêm @strTranslate hai lần, query này thực hiện hai yêu cầu đến Google Translate API (một để dịch tất cả các giá trị cho excerpt, một cho tất cả các giá trị của content).
Nhờ tính năng Multi-Field Directives, query bên dưới cũng dịch tất cả các giá trị cho cả hai trường content và excerpt, nhưng chỉ thực hiện một yêu cầu duy nhất đến Google Translate API:
query {
posts {
excerpt
content
@strTranslate(
affectAdditionalFieldsUnderPos: [1]
)
}
}Chức năng mở rộng
Các chỉ thị nhận thêm trường có thể cung cấp các phép tính bổ sung.
Ví dụ, chỉ thị @export thông thường xuất giá trị của một trường duy nhất, chẳng hạn như tên của người dùng đã đăng nhập:
query GetLoggedInUserName {
me {
name @export(as: "userName")
}
}Thông qua đối số affectAdditionalFieldsUnderPos, @export có thể nhận nhiều trường và sẽ xuất một từ điển chứa các trường đó dưới dạng các mục:
query GetLoggedInUserNameAndSurname {
me {
name
surname
@export(
as: "userProps"
affectAdditionalFieldsUnderPos: [1]
)
}
}@export bây giờ sẽ tạo ra giá trị sau trong biến $userProps
{
"name": "Leo",
"surname": "Loso"
}Cấu hình
Để bật hoặc tắt chỉ thị đa trường trong GraphQL schema, hãy vào module "Multi-Field Directives" trên trang Cài đặt và chọn/bỏ chọn hộp kiểm Enable multi-field directives?:

Để bật hoặc tắt chỉ thị đa trường trên một endpoint cụ thể, hãy chọn tùy chọn mong muốn trong khối "Multi-Field Directives" từ Schema Configuration tương ứng:
