我的使用案例很简单:
- 有用户
- 用户可以创建工作区
- 用户可以删除工作区
- 用户在每个工作区中获得一个角色(
OWNER
、ADMIN
、MANAGER
、VIEWER
)
问题:
这需要一个显式many-to-many
关系(users
<->workspaces
)。
创建工作区是很好的,它可以工作。删除工作区是问题发生的地方。它可能:
- 不删除任何内容
- 或者使用
onDelete: Cascade
删除所有内容(user
+workspace
+their relation table row
)
我显然不希望我的用户被删除。
下面是我的Prisma模式:
model User {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
email String? @unique
plan Plan? @relation(fields: [planId], references: [id], onDelete: Cascade)
planId String?
workspaces WorkspacesOnUsers[]
}
model Workspace {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
name String?
users WorkspacesOnUsers[]
}
model WorkspacesOnUsers {
id String @id @default(cuid())
user User? @relation(fields: [userId], references: [id], onDelete: Restrict, onUpdate: Restrict)
userId String?
workspace Workspace? @relation(fields: [workspaceId], references: [id])
workspaceId String?
role Role? @default(VIEWER)
}
enum Role {
OWNER
ADMIN
MANAGER
VIEWER
}
这就是我尝试从用户删除工作区的方法:
await prisma.workspace.delete({
where: { id: workspaceId },
})
我也尝试了这个方法,但它只删除了关系中的行,但在此之后我仍然无法删除工作空间(Foreign key constraint failed on the field: WorkspacesOnUsers_userId_fkey (index)
):
await prisma.workspace.update({
where: { id: workspaceId },
data: {
users: { deleteMany: {} },
},
})
来人啊!
1条答案
按热度按时间lvmkulzt1#
我有一个类似的问题,但与用户删除职位,这是我如何删除一个职位附加到一个用户通过有id(在这种情况下,他们的sessionId)
在您情况下,它将类似于以下内容
希望这对你有帮助!