【发布时间】: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