Graphene-Django中能否在GraphQL查询中过滤关联的playergwstats集合?
问题解答
1. 能否在GraphQL查询中通过managerGwPicks的gameweek参数过滤playergwstats集合?
完全可以实现,核心在于GraphQL后端Resolver的逻辑设计,和数据库表之间的直接关联无关。
虽然managerGwPicks和playergwstats没有直接关联,但它们通过player对象建立了间接关联。你可以在定义managerGwPicks字段的Resolver时,把传入的gameweek参数传递给player对象下的playergwstats字段的Resolver,让后者在查询数据库时只返回对应周的数据。
举个示例查询写法:
query GetManagerGwPicks($gameweek: Int!) { managerGwPicks(gameweek: $gameweek) { id player { id name playergwstats(gameweek: $gameweek) { # 复用gameweek参数过滤单周数据 points minutesPlayed } } } }
后端Resolver的大致逻辑:
managerGwPicksResolver:接收gameweek参数,查询得到对应的球员列表。player.playergwstatsResolver:接收上层传递的gameweek参数,针对当前球员ID,查询playergwstats表中player_id匹配且gameweek等于指定值的记录。
只要后端支持这种参数透传或字段级过滤,就能在一次查询中拿到过滤后的结果。
2. 前端用两个查询的方案是否合理?
这个方案可行但并非最优:
- 可行点:逻辑简单,无需改动后端Resolver,前端分别获取球员信息和对应周的统计数据后,通过球员ID关联合并即可。
- 缺点:会增加一次网络请求,导致整体响应延迟升高;如果球员数量较多,还可能出现请求并发问题,需要额外处理。
如果后端暂时无法支持字段级过滤,这个方案可以作为临时解决办法,但长期来看,建议优先优化后端Resolver,实现一次查询完成数据获取和过滤。
内容的提问来源于stack exchange,提问作者Robben
相关产品推荐
相关产品推荐

