【问题标题】:How to perform a nested query in graphql using gatsby-source-prismic如何使用 gatsby-source-prismic 在 graphql 中执行嵌套查询
【发布时间】:2019-09-20 05:28:52
【问题描述】:

我刚刚开始使用 gatsby 和 graphql,并且我已经开始使用 prismic 作为 cms。我不知道如何执行嵌套查询,避免过度获取。我什至不知道这是否可能,或者只是我在用 SQL 术语思考问题。

我在 prismic 上有两个自定义类型,它们使用内容关系相关联。这些是Productions,通过一组可重复的字段有许多People。我想要的结果是有一个页面(home)显示最新的production,其中包含people 的列表,其中包含people 的每个人以及他们在每个角色中的所有角色production

我设法通过获取home 页面中的所有people 和所需的production 并通过javascript 在前端过滤返回的数据来做到这一点。但是,我真的觉得这种方式并不理想,因为它需要获取所有人,而不仅仅是我的页面所需的人。

    allPrismicProduction(
      limit: 1
      sort: { fields: [last_publication_date], order: DESC }
    )  {
    edges {
      node {
        data {
          casting {
            ...castingData
          }
        }
      }
    }
  }
    allPrismicPerson {
      edges {
        node {
          id
          data {
            name {
              text
            }
            photo {
              url
            }
          }
        }
      }
    }
  }

const productions = data.allPrismicProduction.edges
const people = data.allPrismicPerson.edges
const sortedprods = []
productions.forEach(el => {
    let castings = el.node.data.casting.map(cast => cast.person.uid)
    castings.forEach(casting =>{
    people.filter(person => {
      if(castings.indexOf(person.node.uid) > -1){
        return person
      }
    sortedprods.push({
      production: el.node,
      people: relpeople,
    })
  })
})

所以我要做的是获取所有people,然后根据查询返回的productions 中的uids 过滤它们。

我想知道是否有可能,或者有什么更好的方法来实现这一点,如何通过仅获取 people 来限制过度获取,uid 中存在 @987654337 @s 由查询的第一部分给出。 这种思维方式与graphql兼容吗?

【问题讨论】:

    标签: graphql gatsby prismic.io


    【解决方案1】:

    我设法通过在 github 上查看 gatsby-source-prismic 的其他问题来解决这个问题。 可以使用以下结构查询相关内容节点:

    {
      allPrismicMyContentType {
        edges {
          node {
            data {
              my_relations {
                relation {
                  document {
                    data {
    

    在数据中,您可以访问所需类型的所有属性。

    通过这种方式,人们可以通过一次查询来获取 prismic 上的所有相关内容

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 2020-09-21
      • 2019-08-03
      • 2019-04-02
      • 1970-01-01
      • 2019-10-26
      • 2020-11-14
      • 2020-02-03
      • 2020-07-25
      相关资源
      最近更新 更多