我刚刚开始使用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兼容吗?
答案 0 :(得分:0)
我设法通过在github上的gatsby-source-prismic的其他问题上多一些来解决这个问题。 可以使用以下结构查询相关内容节点:
{
allPrismicMyContentType {
edges {
node {
data {
my_relations {
relation {
document {
data {
您可以在数据中的何处访问所需类型的所有属性。
通过这种方式,您可以执行一次查询以获取有关方尖碑的所有相关内容