【问题标题】:GraphQL - What are best practices for nested queries?GraphQL - 嵌套查询的最佳实践是什么?
【发布时间】:2021-01-06 23:01:47
【问题描述】:

我遇到了问题,不确定是我对 GraphQL 的理解还是我正在使用的平台 (Strapi) 的问题。

上下文:对于我的用例,我想展示一个项目组合(或“案例”)。每个案例都有一组参与其中的贡献者。此字段独立于案例的作者/创建者。问题在于,出于技术原因,Case 的内容分为草稿和已发布两种类型。这意味着当我想要获取所有文章时,我需要在嵌套中“更深”一层以包含贡献者数组。

Case
-- Draft
---- Caseinfo
------ Contributors

-- Published
---- CaseInfo
------ Contributors

目前我可以获取 allCase 并获取每个案例的内容,以及它的贡献者:

// Used in Gatsby's `<StaticQuery />`
// This works fine.

  allCase {
    edges {
      node {
        contributors {
          name
        }
      }
    }
  }

但是当我尝试包含嵌套时

  allCase(filter: {status: {eq: "published"}}) {
    edges {
      node {
        published_contents {
          id
          title
          // Cannot query field "contributors" on type "CasePublished_contents".
          contributors {
              name
          }
        }
      }
    }
  }

所以一旦贡献者字段嵌套更深一层,我就无法查询它?

从概念上讲,您能否像这样进行深度嵌套的 GraphQL 查询并期望它“顺着树”遵循所有关系内容类型?

【问题讨论】:

  • 请发布您的 graphql 架构的相关部分。 CaseDraftPublished 的并集吗?

标签: javascript graphql strapi


【解决方案1】:

是的,您不能在较低级别查询较高级别实体的字段。 contributors 字段仅存在于节点上(CaseInfo?),而不存在于 CasePublished_contents 类型上。

只是不要嵌套它:

allCase(filter: {status: {eq: "published"}}) {
  edges {
    node {
      published_contents {
        id
        title
      }
      contributors {
        name
      }
    }
  }
}

【讨论】:

  • 但published_contents 和draft_contents 可能有不同的贡献者......一个用例可能是如果我有一个显示“4 个贡献者”的已发布版本,但我开始在草稿状态下进行编辑,更改为“ 3"
  • @LucasArundell 好吧,根据您的架构,他们都没有contributors。如果您需要更改它,请向我们展示您是如何构建/配置架构的,而不是(仅)查询。
  • 哦,明白了。所以我正在使用 Strapi - 一个生成模式的 CMS。我的(有限的)理解是,当我在“案例”中创建任何字段时,它们会自动显示在我的查询中。也许与它是嵌套关系的事实有关
猜你喜欢
  • 2013-10-02
  • 2014-01-23
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 2022-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多