如何使用 gatsby-source-prismic 在 graphql 中执行嵌套查询

Posted

技术标签:

【中文标题】如何使用 gatsby-source-prismic 在 graphql 中执行嵌套查询【英文标题】:How to perform a nested query in graphql using gatsby-source-prismic 【发布时间】: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兼容吗?

【问题讨论】:

【参考方案1】:

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


  allPrismicMyContentType 
    edges 
      node 
        data 
          my_relations 
            relation 
              document 
                data 

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

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

【讨论】:

以上是关于如何使用 gatsby-source-prismic 在 graphql 中执行嵌套查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?