0

我有一个这样的 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")
}

正如你在UserPollI have predicttype ofPollResult和 Poll 中看到的,我有resulttype of PollResult。现在我想查询 Poll 并找到与 with 具有相同值的特定用户(使用 id 或电子邮件usersPrediction -> predictPoll -> result

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

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

  }
}

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

4

2 回答 2

1

您能否将您的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

于 2019-03-06T22:44:26.150 回答
1

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

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

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

希望有帮助

于 2019-03-07T07:03:17.550 回答