所以我在Android应用程序中将GraphQL与Hasura和Apollo结合使用。该应用程序与运动有关,它在比赛的多个部分中存储每个球员的多个得分集。我的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
}
}
}
}
}
如何在不过滤客户端数据的情况下实现这一目标。
答案 0 :(得分:0)
我知道这太迟了,但是查询将按原样工作,而没有第二个where子句
query PointsQuery($matchId: String!) {
SegmentQL: segment(where: {matchId: {_eq: $matchId}}) {
SegmentId: id
segment_player {
player {
...PlayerQL
scores {
...ScoreQL
}
}
}
}
}
因为您只会获得与该细分市场相关的玩家,然后才只会获得与该细分市场相关的玩家的分数。
如果分数实际上与某个细分相关,并且您想要该细分的所有分数,而不是与该玩家与该细分相关的所有分数,则应该添加其他关系
query PointsQuery($matchId: String!) {
SegmentQL: segment(where: {matchId: {_eq: $matchId}}) {
SegmentId: id
score {
...ScoreQL
}
segment_player {
player {
...PlayerQL
}
}
}
}