【问题标题】:Is it possible to create a GraphQL subquery to create an array as an element of a markdownRemark?是否可以创建 GraphQL 子查询来创建数组作为 markdownRemark 的元素?
【发布时间】:2019-08-17 09:14:37
【问题描述】:

我正在为一所语言学校制作网页,现在正在尝试创建有关那里教授的语言的网页。它们应该包括语言的名称、简短的描述和与其相关的计划项目列表。在 Netlify CMS 中,我为他们制作了 2 个集合。其中一个包含一般语言信息,另一个包含计划项目。

当我进入一种语言的网页时,我想做的是从language_pages 集合和schedule_items 的数组中获取一般信息,在language 字段中具有相同的值,但我有点挠头想知道怎么做。

2 个集合中的每一个都包含一个 templateKey 字段,用于区分集合。一般语言信息的值为language-post,日程项目的值为schedule-item

我获取单一语言页面的基本查询如下:

query {
 markdownRemark(frontmatter: { language: { eq: "Niemiecki" }}) {
  html
    frontmatter {
      language
      description
    }
  }
}

字段语言也存在于计划项目集合中,所以我想我应该以某种方式使用它来过滤集合。我是一个完整的graphQL菜鸟,但是我还没有真正找到我在这里尝试做的事情的例子。我完整的 bodge-job 导致了这样的结果:

 query {
  markdownRemark(frontmatter: { language: { eq: "Niemiecki" }}) {
    html
    frontmatter {
      language
      description

    }
    children {
      id
      group
      room
      time
    }
  }
}

这甚至没有正确执行,老实说,我不知道如何让它发挥作用。

【问题讨论】:

  • 所以每个集合都有 2 个文件夹,它们都是 markdown 并且每个都有 language 作为 frontmatter 中的字段?
  • *每个收藏夹一个文件夹
  • 每个集合都有一个文件夹,包含标记页面,并且在frontmatter中有一个语言字段,正确。

标签: graphql gatsby


【解决方案1】:

您可以并排执行 2 个查询并使用正则表达式按文件夹名称过滤:

query LanguageInfo($lang: String) {
  languagePage: markdownRemark(
    frontmatter: { language: { eq: $lang }},
    fileAbsolutePath: {
        regex: "/your-language-folder-name/"
      }
  ) {
    frontmatter { ... }
  }

  scheduledItem: markdownRemark(
    frontmatter: { language: { eq: $lang }},
    fileAbsolutePath: {
        regex: "/your-schedule-folder-name/"
      }
  ) {
    frontmatter { ... }
  }
}
  • lang 可能是您在以编程方式创建页面时传递给 createPage 操作的变量。然后,您可以在页面模板的查询中使用它。来自the doc 的示例以防您需要:
createPage({
  path: `/my-sweet-new-page/`,
  component: path.resolve(`./src/templates/my-sweet-new-page.js`),
  // The context is passed as props to the component as well
  // as into the component's GraphQL query.
  context: {
    lang: `english`,
  },
})
  • languagePage & scheduledItem 是别名,可以更轻松地检索您的数据。您可以访问 data.languagePage...data.scheduledItem... 等数据

如果有帮助,请告诉我。

【讨论】:

  • 我认为这个查询符合我的要求,只需要调整我的其余代码以适应它:) 非常感谢。
  • 我现在可以确认它按预期工作。再次非常感谢您。
  • 我有一个公共 github repo 看看你是如何解决它的?
  • 不,对不起,我在做商业项目的时候遇到这个问题。该代码位于私人仓库中。但是,如果您有任何其他问题,我很乐意为您提供帮助
猜你喜欢
  • 2023-03-05
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
相关资源
最近更新 更多