如何删除prisma2中的关系项

问题描述

我的数据模型包括以下节点:

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"]
}