TypeORM 的软删除(Soft Delete)功能允许标记记录为已删除而不是物理删除:
-
启用软删除: 在实体中使用 @DeleteDateColumn() 装饰器:
typescript@Entity() export class User { @DeleteDateColumn() deletedAt?: Date; } -
软删除操作:
typescriptawait userRepository.softRemove(user); // 或使用 await userRepository.softDelete(userId); -
恢复软删除的记录:
typescriptawait userRepository.restore(userId); -
查询时排除软删除的记录: 默认情况下,find() 方法会自动排除已软删除的记录。
-
包含软删除的记录:
typescriptuserRepository.find({ withDeleted: true }); -
只查询软删除的记录:
typescriptuserRepository.find({ withDeleted: true, where: { deletedAt: Not(IsNull()) } });
软删除的优势是可以保留数据历史,便于数据恢复和审计。