Prisma 中的数据建模与关系

Roy*_*Roy 1 javascript data-modeling prisma

我在 Prisma 中理解关系和数据建模时遇到问题。我有一个关于可以参加网球比赛的两个用户的“简单”示例。所以我有:

Model User {
  id      Int @id 
  name    String 
}

Model Game { 
  id        Int @id 
  player1   PlayerInGame
  player2   PlayerInGame
}

Model PlayerInGame {
  id      Int @id
  player  User
  game    Game
}
Run Code Online (Sandbox Code Playgroud)

它给了我这个错误:

Error validating model "Game": Ambiguous relation detected. The fields `player1` and `player2` in model `Game` both refer to `PlayerInGame`. Please provide different relation names for them by adding `@relation(<name>).
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?提前致谢。

我也尝试在 @relation 字段中进行操作,但这给了我以下错误:

model Game {
  id        Int          @id @default(autoincrement())
  createdAt DateTime     @default(now())
  player1   PlayerInGame @relation("player1")
  player2   PlayerInGame  @relation("player2")
}


Error validating model "Game": Automatic related field generation would cause a naming conflict. Please add an explicit opposite relation field.
Run Code Online (Sandbox Code Playgroud)

mav*_*ein 6

您可以通过在 上提供两个关系字段来修复此错误PlayerInGame。您在 上有两个关系字段Game。因此,您还需要两个相反的关系字段PlayerInGame。在您的应用程序逻辑中,您必须确保仅设置了这两个关系字段之一。所以只能PlayerInGame.gameAsPlayer1PlayerInGame.gameAsPlayer2应该根据您的业务领域进行设置。

model User {
  id      Int @id 
  name    String 
}

model Game { 
  id        Int @id 
  player1   PlayerInGame @relation("GamePlayer1")
  player2   PlayerInGame @relation("GamePlayer2")
}

model PlayerInGame {
  id            Int   @id
  player        User
  gameAsPlayer1 Game? @relation("GamePlayer1")
  gameAsPlayer2 Game? @relation("GamePlayer2")
}
Run Code Online (Sandbox Code Playgroud)


Rya*_*yan 5

最好的方法是建立多对多关系。将来您也可以向游戏添加任意数量的用户,并且可以依次扩展。

model User {
  id    Int    @id
  name  String
  games Game[]
}

model Game {
  id    Int    @id
  name  String
  users User[]
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以有条件地检查游戏中的玩家数量,并在业务逻辑中限制它们。