首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Prisma2和Jest删除表中的所有项

使用Prisma2和Jest删除表中的所有项
EN

Stack Overflow用户
提问于 2020-06-18 18:44:59
回答 2查看 5.5K关注 0票数 2

我想知道如何用Prisma2和Jest删除表中的所有项目?

我读了CRUD文件,我试着用这个:

user.test.js

代码语言:javascript
复制
....
import { PrismaClient } from "@prisma/client"

beforeEach(async () => {
    const prisma = new PrismaClient()
    await prisma.user.deleteMany({})
})
...

但我有个错误:

代码语言:javascript
复制
Invalid `prisma.user.deleteMany()` invocation:
The change you are trying to make would violate the required relation 'PostToUser' between the `Post` and `User` models.

我的数据库

代码语言:javascript
复制
CREATE TABLE User (
  id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
  name VARCHAR(255),
  email VARCHAR(255) UNIQUE NOT NULL,
  password VARCHAR(255) NOT NULL
);

CREATE TABLE Post (
  id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
  title VARCHAR(255) NOT NULL,
  createdAt TIMESTAMP NOT NULL DEFAULT now(),
  content TEXT,
  published BOOLEAN NOT NULL DEFAULT false,
  fk_user_id INTEGER NOT NULL,
  CONSTRAINT `fk_user_id` FOREIGN KEY (fk_user_id) REFERENCES User(id) ON DELETE CASCADE
);

schema.prisma

代码语言:javascript
复制
model Post {
  content    String?
  createdAt  DateTime @default(now())
  fk_user_id Int
  id         Int      @default(autoincrement()) @id
  published  Boolean  @default(false)
  title      String
  author     User     @relation(fields: [fk_user_id], references: [id])

  @@index([fk_user_id], name: "fk_user_id")
}

model User {
  email    String   @unique
  id       Int      @default(autoincrement()) @id
  name     String?
  password String   @default("")
  Post     Post[]
  Profile  Profile?
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-19 12:14:42

您违反了PostUser之间的外键约束。在删除UserPosts之前,不能删除它

代码语言:javascript
复制
beforeEach(async () => {
    const prisma = new PrismaClient()
    await prisma.post.deleteMany({where: {...}}) //delete posts first
    await prisma.user.deleteMany({})
})

或者设置外键的级联删除,这样当您删除用户时,它的文章就会自动删除。

票数 3
EN

Stack Overflow用户

发布于 2021-04-28 23:18:08

这是另一种方法,这将删除所有行及其依赖行,还将重置ids。这样您就可以遍历所有的表和顺序,这并不重要。

代码语言:javascript
复制
prisma.$executeRaw(`TRUNCATE TABLE ${table} RESTART IDENTITY CASCADE;`)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62457267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档