GraphQL-有条件地执行子查询

Vadorequest

我正在尝试优化由整个应用程序共享的某些React组件(例如Footer和Header组件)执行的查询。

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)指令。

但是指令似乎仅适用于字段,而不适用于整个查询。所以我想知道我想做的事是否可行,因为我写的方式无效。

丹尼尔·雷登(Daniel Rearden)

一个GraphQL文档中的任何字段可以明确地包括使用@include指令或明确地排除使用@skip指令。指令应该在字段名称和参数之后,但在字段选择集之前(如果有的话)提供,如您的问题所示:

studentSolutionRelationships(where:{ 
  #...input fields omitted for brevity
}) @include(if: $fetchInstitution) {
  status
}

该指令采用单个参数(if),该参数必须是一个Boolean值。该值可以是文字(即truefalse)或Boolean类型的变量GraphQL没有提供一种评估表达式的方法-任何条件逻辑都必须驻留在客户端代码中,并用于确定传递给if参数的变量的值

指令可以应用于文档中的任何字段,包括根级别的指令(例如studentSolutionRelationships和)organisation实际上,您可以使用这些指令排除所有根字段-请记住,在这种情况下,查询仍将运行并仅返回一个空对象。

换句话说,这里的方法是正确的。如果查询失败,那是由于一个不相关的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章