У меня есть следующая потребность: используя синтаксис 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
} }
}
Но я не могу разбить глобальные результаты на страницы.
Итак, мой вопрос, есть ли какое-нибудь решение для фильтрации по нескольким значениям и разбивки на страницы?


Я не уверен, откуда взялась путаница, но ничто не мешает вам сделать ваш первый пример, вам просто нужно, чтобы тип ввода категории был массивом строк. Хотя я бы лично переименовал его в categories:
type Query {
rssFeed(
first: Int,
last: Int,
before: String,
after: String,
categories: [String!]
): SomeConnection
}
Как вы на самом деле реализуете логику преобразователя, чтобы заставить ее работать, зависит от вас, но, вероятно, это будет лишь немного отличаться от того, как вы это сделаете для одной категории.
Поскольку я не могу изменить свою сущность, мне нужно создать настраиваемый фильтр API-платформы?