【问题标题】:GraphQL query for find equal field on realationsGraphQL 查询在 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"}}){

  }
}

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

【问题讨论】:

    标签: graphql prisma prisma-graphql


    【解决方案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

      【讨论】:

        猜你喜欢
        • 2021-04-10
        • 2021-11-04
        • 2021-09-20
        • 2019-06-29
        • 2021-10-10
        • 2023-04-09
        • 2017-10-31
        • 2018-06-13
        • 1970-01-01
        相关资源
        最近更新 更多