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 -> predict
和 Poll -> 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 上查找相等字段的主要内容,如果未能解决你的问题,请参考以下文章
Reactjs / Graphql:在页面加载时停止执行graphql查询