Схема Prisma - создание поля отношения из нескольких возможных внешних ключей (отношение OR) - PullRequest
1 голос
/ 17 апреля 2020

Как создать relation field в схеме призмы, которая нацелена на 2 возможных 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 ? */ ) // <----
}

Что добавить в определение поля отношения Team.matches, чтобы Team.matchs содержал любой матч, сыгранный командой с любой стороны, как team1 или team2?

1 Ответ

2 голосов
/ 17 апреля 2020

Это невозможно в Призма прямо сейчас! Я создал проблему в нашем репозитории для технических спецификаций , чтобы подумать о способах ее улучшения!


Обходной путь

С 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")
}
...