GraphQL 查询在关系上查找相等字段
GraphQL query for find equal field on realations
我有一个这样的 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
并且在 Poll 中
我有 result
类型 PollResult
。现在我想查询 Poll 并找到 usersPrediction -> predict
与 Poll -> result
.
具有相同值的特定用户(具有 ID 或电子邮件)
我尝试的一个查询是这样的:
query{
userPolls(where:{user:{id:"someid"}}){
}
}
但我不知道如何通过民意调查找到具有相同预测的用户result.If这是我的架构问题,请告诉我。
你能用三个字段替换你的 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
我想不出在单个查询中表达它的方法,但由于您使用的是枚举,所以它只会是三个类似的查询。
query predict_HOME_WIN{
polls(where:{result: HOME_WIN}){
usersPrediction(where:{predict: HOME_WIN})
user{
id
}
}
}
当结果为 HOME_WIN 时,这将为您提供预测 HOME_WIN 的所有用户。然后您可以对其他两个枚举值执行相同的查询并对结果求和。然后您拥有所有预测正确结果的用户。您可以通过命名查询一次将查询发送到 Prisma。
希望对您有所帮助
我有一个这样的 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
并且在 Poll 中
我有 result
类型 PollResult
。现在我想查询 Poll 并找到 usersPrediction -> predict
与 Poll -> result
.
我尝试的一个查询是这样的:
query{
userPolls(where:{user:{id:"someid"}}){
}
}
但我不知道如何通过民意调查找到具有相同预测的用户result.If这是我的架构问题,请告诉我。
你能用三个字段替换你的 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
我想不出在单个查询中表达它的方法,但由于您使用的是枚举,所以它只会是三个类似的查询。
query predict_HOME_WIN{
polls(where:{result: HOME_WIN}){
usersPrediction(where:{predict: HOME_WIN})
user{
id
}
}
}
当结果为 HOME_WIN 时,这将为您提供预测 HOME_WIN 的所有用户。然后您可以对其他两个枚举值执行相同的查询并对结果求和。然后您拥有所有预测正确结果的用户。您可以通过命名查询一次将查询发送到 Prisma。
希望对您有所帮助