Prisma 架构 - 从多个可能的外键(OR 关系)创建关系字段

Yai*_*pro 2 prisma

如何创建一个relation field以 2 为目标的 prisma 模式relation scalar fields

例如,在足球中,假设我们有以下 2 个模型:

model Match {
    team1Id     Int
    team1       Team        @relation("team1", fields: [team1Id], references: [id])

    team2Id     Int
    team2       Team        @relation("team2", fields: [team2Id], references: [id])
}

model Team {
    id          Int         @default(autoincrement()) @id
    name        String
    matches     Match[]     @relation( /* What to put here ? */ ) // <----
}
Run Code Online (Sandbox Code Playgroud)

Team.matches为了允许Team.matchs包含球队从任何一方(如 team1 或 team2)进行的任何比赛,在关系字段定义中应放入什么内容?

nbu*_*urk 7

这在 Prisma 中目前是不可能的!我在我们的存储库中为技术规范创建了一个问题,以思考改进的方法!


解决方法

使用 Prisma,您始终需要在每个关系的两侧都有一个关系字段。这意味着您需要在 上有两个关系字段Team,一个代表球队“作为球队 1”参加的比赛,另一个代表球队“作为球队 2”参加的比赛。

model Match {
  team1Id Int
  team1   Team @relation("team1", fields: [team1Id], references: [id])
  team2Id Int
  team2   Team @relation("team2", fields: [team2Id], references: [id])
  @@id([team1Id, team2Id])
}

model Team {
  id             Int     @default(autoincrement()) @id
  name           String
  matchesAsTeam1 Match[] @relation("team1")
  matchesAsTeam2 Match[] @relation("team2")
}
Run Code Online (Sandbox Code Playgroud)