深度删除二级关系数据

Deep delete second level relationships data

我有三个模型,它们通过关系联系在一起。

model Product {
  id      Int         @id @default(autoincrement())
  name    String
  type_id Int
  type    ProductType @relation(fields: [type_id], references: [id])
  tickets Ticket[]
}

model ProductType {
  id               Int       @id @default(autoincrement())
  name             String
  asigned_products Product[]
}

model Ticket {
  id          Int            @id @default(autoincrement())
  title       String
  description String
  priority    TicketPriority
  type        TicketType
  product_id  Int
  product     Product        @relation(fields: [product_id], references: [id])
  files       File[]
}

为了删除 ProductType,我需要删除引用它的产品,我需要再次删除引用这些产品的票证。

我知道可以通过这种方式删除产品,但是否可以更深入地删除票证?

await this.prismaService.productType.update({
            where: { id },
            data: { asigned_products: { deleteMany: {} } }
        });

        const deletedProductType = await this.prismaService.productType.delete({
            where: { id }
        });

可以用 prisma 做到这一点吗?

也许您正在寻找级联删除,在您的情况下是

model Ticket {
  id          Int            @id @default(autoincrement())
  title       String
  description String
  priority    TicketPriority
  type        TicketType
  product_id  Int
  product     Product        @relation(fields: [product_id], references: [id], onDelete: Cascade)
  files       File[]
}

在这种情况下,将onDelete: Cascade添加到Ticket模型上的product字段意味着删除Product记录也会删除所有相关的Ticket 记录。

有关参考操作的 Prisma 文档:
https://www.prisma.io/docs/concepts/components/prisma-schema/relations/referential-actions