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

时间:2019-05-01 16:59:31

标签: graphql gatsby prismic.io

我刚刚开始使用gatsby和graphql,并且已经开始使用棱镜作为cms。我无法弄清楚如何执行嵌套查询,避免过度获取。我什至不知道这是否有可能,或者仅仅是我想到SQL术语中的问题。

我在棱柱上有两种自定义类型,它们使用内容关系进行关联。这些是Productions,通过可重复的字段组具有许多People。我想要的结果是要有一个页面(home),其中显示了最新的production以及其中已加注星标的people的列表,另外还有一个页面是与{{1 }}及其在每个people中的所有角色。

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

production

所以我要做的是获取所有 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中找到的uid对其进行过滤。

我想知道是否有可能,或者有什么更好的方法来实现这一目标,如何通过仅获取存在production的{​​{1}}来限制超量获取在查询的第一部分给出的people中。 这种思维方式与graphql兼容吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

通过这种方式,您可以执行一次查询以获取有关方尖碑的所有相关内容