Prisma是一个现代的数据库访问库,它本身不直接提供软删除(soft delete)和硬删除(hard delete)这样的内建机制,但你可以在应用层面实现这两种删除策略。

  • 硬删除:直接从数据库中删除记录,这是数据库最基本的删除操作。在Prisma中,你可以使用deletedeleteMany方法来执行硬删除。

  • 软删除:软删除通常是通过在数据库记录中设置一个标记(如deletedAt时间戳字段)来实现的,而不是实际从数据库中移除记录。这样做的好处是,你可以保留数据,以便将来需要恢复或保留删除记录的历史。

为了在Prisma中实现软删除,你可以按照以下步骤操作:

  1. 在你的模型中添加一个如deletedAt的字段,通常是一个可选的日期时间字段。

     model User {
       id        Int      @id @default(autoincrement())
       name      String
       deletedAt DateTime? // 可选的软删除标记
       // 其他字段...
     }
  2. 当你想要软删除一个记录时,只需要更新deletedAt字段为当前时间戳。

     const user = await prisma.user.update({
       where: { id: userId },
       data: { deletedAt: new Date() },
     });
  3. 为了获取未被软删除的记录,你可以在查询时过滤掉那些deletedAt字段非空的记录。

     const users = await prisma.user.findMany({
       where: { deletedAt: null },
     });
  4. 如果你需要恢复一个被软删除的记录,你可以将deletedAt字段更新回null

     const user = await prisma.user.update({
       where: { id: userId },
       data: { deletedAt: null },
     });

通过这种方式,你可以在应用层面模拟软删除的行为。需要注意的是,你可能需要在大多数的查询中都包含deletedAt: null的条件,除非你需要特意查询到已经软删除的记录。

  1. 如果你需要获取被软删除的数据,可以添加一个选择deletedAt字段不为null的条件:
const deletedUsers = await prisma.user.findMany({
  where: { deletedAt: { not: null } },
});

这个查询将返回所有deletedAt字段有值的记录,即软删除的用户。通过这种方式,你可以轻松地访问到已经软删除的数据。

分类: Nest.js 标签: prismaNestjs软删除硬删除

评论

暂无评论数据

暂无评论数据

目录