Отношение "один ко многим" и "может ко многим" между двумя призматическими моделями

Я работаю над второстепенным проектом и столкнулся с проблемой, которую не знаю, как решить. Я создал две модели: одну для пользователя и одну для проекта. Связь между ними - многие-ко-многим, так как у многих пользователей может быть много проектов, но я также хотел бы добавить createdBy в модель Project, и это должно быть однозначно, поскольку каждый проект может иметь только одного пользователя. кто его создает. Вот так выглядят мои модели:

      model User {
  id            String         @id @default(cuid())
  name          String?
  email         String?        @unique
  emailVerified DateTime?
  image         String?
  createdAt     DateTime       @default(now())
  updatedAt     DateTime       @updatedAt
  accounts      Account[]
  sessions      Session[]
  projects      Project[]
  Project       Project[]      @relation("userId")
}

model Project {
  id             Int          @id @default(autoincrement())
  createdAt      DateTime     @default(now())
  name           String
  favourite      Boolean      @default(false)
  archived       Boolean      @default(false)
  users          User[]
  about          String?
  archivedAt     String?
  deletedAt      String?
  createdBy      User         @relation("userId", fields: [userId], references: [id])
  userId         String
}

Ошибка prisma migrate dev:

Шаг 1 Добавлен обязательный столбец userId к Projectтаблица без значения по умолчанию. В этой таблице 2 строки, выполнить этот шаг невозможно.

Не уверен, что делаю неправильно, поскольку я в значительной степени новичок в моделировании db. Любая помощь будет оценена по достоинству.

1 ответ

Решение

Достигать Many-to-Many с One-To-Many вам нужно установить свой schema.prisma файл вроде:

      model User {
  id            String    @id @default(cuid())
  name          String?
  email         String?   @unique
  emailVerified DateTime?
  image         String?
  createdAt     DateTime  @default(now())
  updatedAt     DateTime  @updatedAt

  projects Project[]

  userProjects UserProjects[]
}

model Project {
  id         Int      @id @default(autoincrement())
  createdAt  DateTime @default(now())
  name       String
  favourite  Boolean  @default(false)
  archived   Boolean  @default(false)
  about      String?
  archivedAt String?
  deletedAt  String?

  createdBy User   @relation(fields: [user_id], references: [id])
  user_id   String

  projectUsers UserProjects[]
}

model UserProjects {
  project    Project @relation(fields: [project_id], references: [id])
  project_id Int
  user       User    @relation(fields: [user_id], references: [id])
  user_id    String

  @@id([project_id, user_id])
}

Он должен успешно мигрировать.

Другие вопросы по тегам