Graphql 如何为事件、团队和成员之间的关系定义模式
在Prisma中,我想对以下内容进行建模,但我不确定如何建模Graphql 如何为事件、团队和成员之间的关系定义模式,graphql,prisma,prisma-graphql,Graphql,Prisma,Prisma Graphql,在Prisma中,我想对以下内容进行建模,但我不确定如何建模 type Event { id: ID! @unique players: [User]! @relation(name: "EventPlayers") teams: [Team]! @relation(name: "EventTeams") ... } type User { id: ID! @unique eventsPlayed: [Event]! @relation(name: "EventPlay
type Event {
id: ID! @unique
players: [User]! @relation(name: "EventPlayers")
teams: [Team]! @relation(name: "EventTeams")
...
}
type User {
id: ID! @unique
eventsPlayed: [Event]! @relation(name: "EventPlayers")
...
}
type Team {
id: ID! @unique
event: Event! @relation(name: "EventTeams")
members: [User]! @relation(name: ?????)
...
}
约束条件
团队成员
必须参加活动。球员
事件。玩家只能分配给一个(或无)团队
事件中列出的人。球员
,但尚未被分配为团队。成员
将处于未分配的
范围内。将它们拖到团队中,将它们分配为团队成员。但是,我想查询所有玩家,作为events{players{id}}
和events{teams{members{id}}}
更新
在仔细考虑之后,我正在考虑一种不同的方法来解决这个问题。这是一个更新的模式,我希望你能对它有所想法/投入
type Event {
id: ID! @unique
users: [EventUser!]!
teams: [Team!]!
title: string
}
type EventUser {
event: Event!
user: User!
role: EventRole!
}
type User {
id: ID! @unique
events: [EventUser!]!
name: string
}
type Team {
event: Event!
members: [EventUser!]!
name: string
}
enum EventRole {
ADMIN
COORDINATOR
JUDGE
PLAYER
REVIEWER
SPONSOR
}
你的模型大部分是准确的。您需要做一些小的更改:
使用@relation
指令:仅当关系不明确时才需要它。例如,自我关系。在你的情况下你不需要它。这是一种传统的思维方式
关系中的可空性:考虑<代码>玩家:[用户] < <代码>关系。它说玩家字段不能为空。它必须是一个列表。但是它使User
成为可选的,这意味着您可以让players=[user1,null,user2]
。你可能不想要这个。这适用于几乎所有的对多关系
用户
类型应具有可选的团队
字段。将有一些用户不是任何团队的成员
通过上述调整,您的模式将如下所示:
type Event {
id: ID! @unique
# Note DOUBLE EXCLAMATION
# Ensure that User, as well as players, are not null.
players: [User!]!
# Note DOUBLE EXCLAMATION
# Ensure that Team and teams are not null.
teams: [Team!]!
}
type User {
id: ID! @unique
eventsPlayed: [Event!]!
team: Team
}
type Team {
id: ID! @unique
event: Event!
members: [User!]!
# Added an extra key for keeping track of past events if required
pastEvents: [Event!]!
}
谢谢你的回复,也谢谢你解释这个双重感叹号。我肯定是想错了。问题是,每个团队
只存在于单个事件中,因此将过去的事件显示为团队类型的一部分是没有意义的。用户可以属于许多团队。我添加了一个新的模式。我喜欢你的想法。@ChrisGeirman,看起来不错。另外,如果您不需要EventRole
,那么可以去掉EventUser
模型。而且,您缺少团队的ID
。否则,它是完美的。谢谢!我一直在玩它,到目前为止效果很好。