如何使用 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
,然后根据查询返回的production
s 中的uid
s 过滤它们。
我想知道是否有可能,或者有什么更好的方法来实现这一点,如何通过仅获取 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 提交?