В graphql отфильтруйте несколько значений одного и того же свойства и разбейте его на страницы

У меня есть следующая потребность: используя синтаксис graphql, отфильтровать коллекцию по нескольким значениям в одном и том же свойстве и разбить результаты на страницы.

Учитывая следующую сущность ...

/** ... APIResource annotations
 */
class RssFeed {
    /** ... APIProperty annotations
    */
    private $category;

    /** ... APIProperty annotations
    */
    private $url; 

    // ... getters
    // ... setters
}

Я хочу отфильтровать коллекцию RssFeed, свойство category которой имеет значение «CategoryA» или «CategoryB», и разбить результаты на страницы.

Насколько мне известно, graphql не позволяет писать синтаксис, похожий на

rssfeed(category: ["CategoryA","CategoryB"]) 
{
    edges { node {
    url,
    category
    } }
}

Поэтому мне нужно разделить операцию поиска, используя отдельные запросы graphql (в теле), например

rssFeedsA: rssfeed(category: "CategoryA") 
{
    edges { node {
    url,
    category
    } }
},
rssFeedsB: rssfeed(category: "CategoryB") 
{
    edges { node {
    url,
    category
    } }
}

Но я не могу разбить глобальные результаты на страницы.

Итак, мой вопрос, есть ли какое-нибудь решение для фильтрации по нескольким значениям и разбивки на страницы?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
0
2 453
1

Ответы 1

Я не уверен, откуда взялась путаница, но ничто не мешает вам сделать ваш первый пример, вам просто нужно, чтобы тип ввода категории был массивом строк. Хотя я бы лично переименовал его в categories:

type Query {
    rssFeed(
        first: Int, 
        last: Int, 
        before: String, 
        after: String, 
        categories: [String!]
    ): SomeConnection
}

Как вы на самом деле реализуете логику преобразователя, чтобы заставить ее работать, зависит от вас, но, вероятно, это будет лишь немного отличаться от того, как вы это сделаете для одной категории.

Поскольку я не могу изменить свою сущность, мне нужно создать настраиваемый фильтр API-платформы?

J. Verger 08.06.2018 10:03

Другие вопросы по теме