GraphQL 查询在 realations 上查找相等字段

Posted

技术标签:

【中文标题】GraphQL 查询在 realations 上查找相等字段【英文标题】:GraphQL query for find equal field on realations 【发布时间】:2019-07-28 17:11:11 【问题描述】:

我有一个这样的 GraphQL 架构(值得一提的是我正在使用 Prisma):

enum PollResult 
  HOME_WIN
  AWAY_WIN
  DRAW

type UserPoll 
  id: ID! @unique
  user: User!
  predict: PollResult!

type Poll 
  id: ID! @unique
  away: Team @relation(name: "AwayTeam")
  home: Team @relation(name: "HomeTeam")
  group: Group!
  country: Country!
  sport: Sport!
  result: PollResult
  state: PollState! @relation(name: "PollState")
  users: [User] @relation(name: "Users")
  usersPrediction: [UserPoll] @relation(name: "UserPoll")

正如你在UserPoll 中看到的,我有predict 类型为PollResult 并在投票中 我有result 类型为PollResult。现在我想查询 Poll 并找到与 usersPrediction -> predictPoll -> result 具有相同值的特定用户(使用 id 或电子邮件)。

我尝试的一个查询是这样的:

query
  userPolls(where:user:id:"someid")

  

但在这里我不知道如何找到与投票结果具有相同预测的用户。如果是我的架构有问题,请告诉我。

【问题讨论】:

【参考方案1】:

我想不出一种方法可以在单个查询中表达这一点,但是由于您使用的是 Enum,所以它只会是三个类似的查询。

query predict_HOME_WIN
  polls(where:result: HOME_WIN)
    usersPrediction(where:predict: HOME_WIN)
     user
      id
      
  

这将为您提供在结果为 HOME_WIN 时预测为 HOME_WIN 的所有用户。然后,您可以对其他两个枚举值执行相同的查询并总结结果。然后,您拥有所有预测正确结果的用户。您可以通过命名查询将查询一次性发送到 Prisma。

希望有帮助

【讨论】:

【参考方案2】:

您能否将您的 usersPrediction 字段替换为三个字段:

allUsersPrediction rightUsersPrediction wrongUsersPrediction

那么整个架构将是:

enum PollResult 
  HOME_WIN
  AWAY_WIN
  DRAW

type UserPoll 
  id: ID! @unique
  user: User!
  predict: PollResult!

type Poll 
  id: ID! @unique
  away: Team @relation(name: "AwayTeam")
  home: Team @relation(name: "HomeTeam")
  group: Group!
  country: Country!
  sport: Sport!
  result: PollResult
  state: PollState! @relation(name: "PollState")
  users: [User] @relation(name: "Users")
  allUsersPrediction: [UserPoll] @relation(name: "UserPoll")
  rightUsersPrediction: [UserPoll] @relation(name: "UserPoll")
  wrongUsersPrediction: [UserPoll] @relation(name: "UserPoll")

需要的用户将在rightUsersPrediction[].user

【讨论】:

以上是关于GraphQL 查询在 realations 上查找相等字段的主要内容,如果未能解决你的问题,请参考以下文章

已收件的顺丰为啥在小程序上查不到?

RelativeLayout不能居中的解决的方法

Reactjs / Graphql:在页面加载时停止执行graphql查询

我可以通过 graphQL 查询多次查询 GraphQL 单一响应吗?

在graphql中突变后查询

如何在 GraphQL 查询变量中使用数组