【问题标题】:Prisma - How to define compound unique constraint with fields in multiple models?Prisma - 如何使用多个模型中的字段定义复合唯一约束?
【发布时间】:2021-07-17 11:39:25
【问题描述】:

我在 Prisma 中有这种不那么简单的模型关系。用户 ---- 课程,我不知道如何确保课程标题字段在该用户创建的课程中是唯一的。换句话说,我不希望一个用户创建多个具有相同名称的课程。但我希望课程与不同的创作者同名。 (只有创作者在注册中具有 TEACHER 角色)

我面临的问题是,我不知道在哪里定义唯一属性以及要包含哪些字段。我要对其进行唯一约束的字段(课程名称、具有 TEACHER 角色的成员)跨不同的模型。

model User {
  id                Int              @id @default(autoincrement())
  email             String           @unique
  passwordHash      String
  enrollments       Enrollment[]
}

model Course {
  id                Int              @id @default(autoincrement())
  name              String
  members           Enrollment[]
}

model Enrollment {
  role              UserRole         @default(STUDENT)

  // Relation Fields
  userId            Int
  courseId         Int
  user              User             @relation(fields: [userId], references: [id])
  course           Course          @relation(fields: [courseId], references: [id])
  @@id([userId, courseId])
  @@index([userId, role])
}

【问题讨论】:

    标签: prisma prisma-graphql prisma2


    【解决方案1】:

    您可能希望在 Course 模型上添加一个字段,定义创建者,以便您可以将该字段用作表本身的唯一约束。

    model Course {
      id                Int              @id @default(autoincrement())
      name              String
      members           Enrollment[]
      creatorId         Int
      creator           User             @relation(fields: [creatorId], references: [id])
      @@unique([creatorId, name], name: "courseIdentifier")
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 2022-09-27
      • 1970-01-01
      • 2020-12-15
      • 2019-06-01
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      相关资源
      最近更新 更多