Как выполнить вложенный запрос в graphql, используя gatsby-source-prismic - PullRequest
1 голос
/ 01 мая 2019

Я только начинаю с 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?

1 Ответ

1 голос
/ 01 мая 2019

Мне удалось решить эту проблему, оглянувшись немного подробнее в других вопросах gatsby-source-prismic на github.Узел связанного содержимого может быть запрошен с использованием следующей структуры:

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

, где в данных вы можете получить доступ ко всем свойствам нужного типа.

Таким образом можно выполнить один запрос, чтобы получить весь связанный контент на prismic

...