Nestjs prisma实现软删除硬删除
Prisma是一个现代的数据库访问库,它本身不直接提供软删除(soft delete)和硬删除(hard delete)这样的内建机制,但你可以在应用层面实现这两种删除策略。
- 硬删除:直接从数据库中删除记录,这是数据库最基本的删除操作。在Prisma中,你可以使用
delete
或deleteMany
方法来执行硬删除。 - 软删除:软删除通常是通过在数据库记录中设置一个标记(如
deletedAt
时间戳字段)来实现的,而不是实际从数据库中移除记录。这样做的好处是,你可以保留数据,以便将来需要恢复或保留删除记录的历史。
为了在Prisma中实现软删除,你可以按照以下步骤操作:
在你的模型中添加一个如
deletedAt
的字段,通常是一个可选的日期时间字段。model User { id Int @id @default(autoincrement()) name String deletedAt DateTime? // 可选的软删除标记 // 其他字段... }
当你想要软删除一个记录时,只需要更新
deletedAt
字段为当前时间戳。const user = await prisma.user.update({ where: { id: userId }, data: { deletedAt: new Date() }, });
为了获取未被软删除的记录,你可以在查询时过滤掉那些
deletedAt
字段非空的记录。const users = await prisma.user.findMany({ where: { deletedAt: null }, });
如果你需要恢复一个被软删除的记录,你可以将
deletedAt
字段更新回null
。const user = await prisma.user.update({ where: { id: userId }, data: { deletedAt: null }, });
通过这种方式,你可以在应用层面模拟软删除的行为。需要注意的是,你可能需要在大多数的查询中都包含deletedAt: null
的条件,除非你需要特意查询到已经软删除的记录。
- 如果你需要获取被软删除的数据,可以添加一个选择
deletedAt
字段不为null
的条件:
const deletedUsers = await prisma.user.findMany({
where: { deletedAt: { not: null } },
});
这个查询将返回所有deletedAt
字段有值的记录,即软删除的用户。通过这种方式,你可以轻松地访问到已经软删除的数据。
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
全部评论 1
terg
Google Chrome Windows 10