Как правильно использовать ‘limit’ и ‘start’ (получить количество экземпляров)

#graphql #strapi

#graphql #strapi #страпи

Вопрос:

Я хотел бы получить все экземпляры модели, но использовать разбивку на страницы для их отображения, поэтому я хотел бы получить 20 элементов на каждой странице.

Выборка первых 20 элементов модели будет выглядеть следующим образом:

 const response = await strapi.request('POST', '/graphql', {
    data: {
        query: `query {
            exams (limit: 20, start: 0) {
              name,
              type
              _id,
            }
          }`
    }
})
  

Проблема в том, что для создания функциональности разбивки на страницы мне нужно было бы заранее знать, сколько экземпляров модели ‘exam’ у меня есть.

Кто-нибудь знает, как это сделать?

Если это имеет значение, я использую strapi cms с плагином graphql.

Комментарии:

1. Как ваш сервер GraphQL подключается к базе данных / серверу данных?

2. Вам нужно добавить еще одно поле к вашему запросу, чтобы вернуть общее количество имеющихся экзаменов, это будет просто дополнительное поле, которое может быть разрешено с помощью преобразователя полей.

3. Я подключаюсь через strapi cms и mlab Pavan, каким будет это дополнительное поле?

Ответ №1:

Вам нужно будет добавить функцию подсчета. Вот пример с типом содержимого Restaurant.

./api/restaurant/config/schema.graphql.js

 module.exports = {
  definition: /* GraphQL */ `
    type RestaurantsConnection {
      aggregate: RestaurantsAggregate
    }
    type RestaurantsAggregate {
      count: Int
    }
  `,
  query: /* GraphQL */ `
    restaurantsConnection(where: JSON): RestaurantsConnection
  `,
  resolver: {
    Query: {
      restaurantsConnection(_, args) {
        return args;
      },
    },
    RestaurantsConnection: {
      aggregate(args) {
        return args;
      },
    },
    RestaurantsAggregate: {
      count(args) {
        return strapi.controllers.restaurant.count({
          query: args.where || {},
        });
      },
    },
  },
};
  

Теперь у вас есть соединение для получения значения count

 {
  restaurantsConnection {
    aggregate {
      count
     }
  }
}
  

Ответ №2:

в Strapi v4 разбивка на страницы возвращает общее количество записей типа контента

   query GetPhotosMeta {
    photos {
      __typename
      meta {
        __typename
        pagination {
          __typename              
          total
        }
      }
    }
  }
  

https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/graphql-api.html#pagination