问题描述
我在 prisma 中有这种不那么简单的模型关系。用户 ---- 课程,我不知道如何确保课程标题字段在该用户创建的课程中是唯一的。换句话说,我不希望一个用户创建多个同名的课程。但我希望课程与不同的创作者同名。 (只有创建者在 Enrollment 中具有 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])
}
解决方法
您可能希望在您的 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")
}