Так что я использую GraphQL с Hasura и Apollo в своем приложении для Android.Приложение связано со спортом, оно хранит множество наборов очков каждого игрока в нескольких сегментах матча.Моя база данных Postgres содержит следующие таблицы (с соответствующими полями):
Match (id, other_fields...)
Segment (id, match_id, other_fields...)
Segment_Player (id, segment_id, match_id)
Player (id, other_fields...)
Score (id, segment_id, player_id, other_fields...)
Segment_Player
- это таблица много-много мостов между Segment
и Player
таблицами.Существуют отношения массива от Match
до Segment
и от Player
до Score
.
Я хочу запросить оценки каждого игрока в матче, разделенном сегментами.Ответ, который я хочу получить, должен выглядеть следующим образом:
Match
--Segment
----Player
------Score
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти способ отфильтровать оценки как по PlayerId
, так и по SegmentId
.Player
- Score
отношение может дать мне все очки этого игрока.Или я могу создать отношение между Segment
и Score
, которое даст мне очки каждого игрока в этом сегменте.Но любой из них все равно оставит мне возможность выполнять фильтрацию на стороне клиента.
Я хочу предоставить возможность возвращать данные в ответ в качестве аргумента в предложении where, как показано ниже:
query PointsQuery($matchId: String!) {
SegmentQL: segment(where: {matchId: {_eq: $matchId}}) {
SegmentId: id
segment_player {
player {
...PlayerQL
scores(where: {segmentId: {_eq: SegmentId}}) {
...ScoreQL
}
}
}
}
}
Как этого добиться без фильтрации данных на стороне клиента.