5

所以我在我的 Android 应用程序中使用了带有 Hasura 和 Apollo 的 GraphQL。该应用程序与运动相关,它在比赛的多个片段中存储每个球员的多个得分集。我的 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_PlayerSegment是和表之间的多对多桥接Player表。Match从toSegment和 from Playerto有数组关系Score

我想查询以分段分隔的比赛中每个球员的得分。我想要的响应应该类似于以下结构:

Match
--Segment
----Player
------Score

我面临的问题是我无法找到一种方法来过滤PlayerIdSegmentId. Player-Score关系可以给我那个球员的所有分数。或者我可以在 和 之间创建一个关系SegmentScore这会给我该部分中每个玩家的分数。但是这些中的任何一个仍然会让我在客户端进行过滤。

我想要的是能够提供数据作为响应返回作为 where 子句中的参数,如下所示:

query PointsQuery($matchId: String!) {
  SegmentQL: segment(where: {matchId: {_eq: $matchId}}) {
    SegmentId: id
    segment_player {
      player {
        ...PlayerQL
        scores(where: {segmentId: {_eq: SegmentId}}) {
          ...ScoreQL
        }
      }
    }
  }
}

如何在不过滤客户端数据的情况下实现这一点。

4

1 回答 1

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
      }
    }
  }
}
于 2020-05-06T20:08:24.840 回答