GraphQL-запрос для нахождения равного поля по реализации - PullRequest
0 голосов
/ 07 марта 2019

У меня есть схема для 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. Теперь я хочу сделать запрос в опросе и найти конкретного пользователя (с идентификатором или адресом электронной почты), который имеет то же значение usersPrediction -> predict с Poll -> result.

один запрос, который я пробую, выглядит примерно так:

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

  }
}

но здесь я не знаю, как найти пользователей с одинаковым прогнозом с результатами опросов. Если это проблема с моей схемой, пожалуйста, дайте мне знать.

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Я не могу придумать способ выразить это в одном запросе, но поскольку вы используете Enum, это будет только три похожих запроса.

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

Это даст вам всех пользователей, которые предсказали HOME_WIN, когда результатом был HOME_WIN.Затем вы можете сделать тот же запрос для двух других значений перечисления и суммировать результаты.Тогда у вас есть все пользователи, которые предсказали правильный результат.Вы можете отправить запросы за один раз в Prisma, назвав их.

Надеюсь, что поможет

1 голос
/ 07 марта 2019

Не могли бы вы заменить поле 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

...