Итак, я использую GraphQL с Hasura и Apollo в своем приложении для Android. Приложение связано со спортом, оно хранит несколько наборов очков каждого игрока в нескольких сегментах матча. В моей базе данных Postgres есть следующие таблицы (с соответствующими полями):
Match (id, other_fields...)
Segment (id, match_id, other_fields...)
Segment_Player (id, segment_id, player_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
}
}
}
}
}
Как этого добиться без фильтрации данных на стороне клиента.