Я только начинаю с gatsby и graphql, и я начал использовать prismic в качестве cms. Я не могу понять, как выполнять вложенные запросы, избегая перегрузок. Я даже не знаю, возможно ли это, или это больше, чем просто думать о проблеме с точки зрения SQL.
У меня есть два пользовательских типа для prismic, которые связаны с использованием отношений содержимого. Это Productions
, которые имеют много People
через повторяющуюся группу полей. В результате я хочу иметь страницу (home
), которая показывает самую последнюю production
со списком people
, кто сыграл главную роль, и еще одну страницу с каждым человеком из people
и всеми его ролями в каждом production
.
Мне удалось это сделать, выбрав все people
на странице home
и требуемый 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
, а затем фильтрую их в соответствии с uid
, найденными в production
s, возвращенных запросом.
Хотелось бы узнать, возможно ли это или нет, как лучше всего этого добиться, как ограничить перегрузку, сделав возможным выборку только people
, чей uid
присутствует в production
с учетом первой части запроса.
Совместим ли этот способ мышления с graphql?