问题描述
我的数据模型包括以下节点:
model User {
id Int @id @default(autoincrement())
name String
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
body String
user User @relation(fields: [userId],references: [id])
userId Int
}
async function deleteUser(_,args) {
const { id } = args
return prisma.user.delete({
where: { id: id }
})
}
但是它给出了一个错误:... The change you are trying to make would violate the required relation UserToPost between the User and Post models.
然后如何删除一个用户?甚至我都尝试先删除帖子,然后再删除用户,但还是发生了同样的错误。
解决方法
您的表格似乎不支持CASCADE
删除,并且prisma
不会自动为您添加表格。在迁移过程中或迁移完成后,您将必须手动更新表的定义。
因此,基本上,更改表定义。
ALTER TABLE public.Post
DROP CONSTRAINT Post_user_fkey,ADD CONSTRAINT Post_user_fkey
FOREIGN KEY (user)
REFERENCES public.User(user)
ON DELETE CASCADE
ON UPDATE CASCADE;
有关配置关系查询的选项,请参阅这些docs。
,此功能现已作为预览功能标志背后的预览功能发布。您可以在 2.26.0 的发行说明中了解它:https://github.com/prisma/prisma/releases/tag/2.26.0
可以通过在 Prisma 架构文件中的 Prisma Client 生成器块中设置预览功能标志 referentialActions
来启用预览功能:
generator client {
provider = "prisma-client-js"
previewFeatures = ["referentialActions"]
}