GraphQL - 有条件地执行子查询
GraphQL - Execute sub query conditionally
我正在尝试优化由我的一些在整个应用程序中共享的反应组件执行的查询,例如页脚和页眉组件。
我试图在未提供变量 institutionPath
时不获取学生解决方案的详细信息。
query organisationAndInstitution($organisationName: String!, $institutionPath: String!, $fetchInstitution: Boolean!){
organisation(where: {
name: $organisationName
}){
name
}
studentSolutionRelationships(where:{
AND: [
{
status: PUBLISHED
},
{
studentSolution: {
status: PUBLISHED
}
}
]
}) @include(if: $fetchInstitution) {
status
}
}
为此,我添加了一个 fetchInstitution
布尔变量并添加了 @include(if: $fetchInstitution)
指令。
但是指令似乎只适用于字段,而不适用于整个查询。所以我想知道我想做的事情是否可行,因为我写的方式是无效的。
GraphQL 文档中的任何字段都可以使用 @include
指令显式 包含 或使用 [=] 显式 排除 12=] 指令。该指令应在字段名称和参数之后,但在字段的选择集之前提供,如果有的话,如您的问题所示:
studentSolutionRelationships(where:{
#...input fields omitted for brevity
}) @include(if: $fetchInstitution) {
status
}
该指令采用单个参数 (if
),该参数必须是 Boolean
值。该值可以是文字(即 true
或 false
)或 Boolean
类型的变量。 GraphQL 不提供评估表达式的方法——任何条件逻辑都必须驻留在客户端代码中,并用于确定传递给 if
参数的变量值。
指令可以应用于文档中的任何字段,包括问题中的studentSolutionRelationships
和organisation
等根级字段。事实上,您可以使用这些指令排除所有根字段——请记住,在这种情况下,查询仍将 运行 而只是 return 一个空对象。
也就是说,你这里的做法是正确的。如果查询失败,那是因为不相关的问题。
我正在尝试优化由我的一些在整个应用程序中共享的反应组件执行的查询,例如页脚和页眉组件。
我试图在未提供变量 institutionPath
时不获取学生解决方案的详细信息。
query organisationAndInstitution($organisationName: String!, $institutionPath: String!, $fetchInstitution: Boolean!){
organisation(where: {
name: $organisationName
}){
name
}
studentSolutionRelationships(where:{
AND: [
{
status: PUBLISHED
},
{
studentSolution: {
status: PUBLISHED
}
}
]
}) @include(if: $fetchInstitution) {
status
}
}
为此,我添加了一个 fetchInstitution
布尔变量并添加了 @include(if: $fetchInstitution)
指令。
但是指令似乎只适用于字段,而不适用于整个查询。所以我想知道我想做的事情是否可行,因为我写的方式是无效的。
GraphQL 文档中的任何字段都可以使用 @include
指令显式 包含 或使用 [=] 显式 排除 12=] 指令。该指令应在字段名称和参数之后,但在字段的选择集之前提供,如果有的话,如您的问题所示:
studentSolutionRelationships(where:{
#...input fields omitted for brevity
}) @include(if: $fetchInstitution) {
status
}
该指令采用单个参数 (if
),该参数必须是 Boolean
值。该值可以是文字(即 true
或 false
)或 Boolean
类型的变量。 GraphQL 不提供评估表达式的方法——任何条件逻辑都必须驻留在客户端代码中,并用于确定传递给 if
参数的变量值。
指令可以应用于文档中的任何字段,包括问题中的studentSolutionRelationships
和organisation
等根级字段。事实上,您可以使用这些指令排除所有根字段——请记住,在这种情况下,查询仍将 运行 而只是 return 一个空对象。
也就是说,你这里的做法是正确的。如果查询失败,那是因为不相关的问题。