soft delete 을 할때 엔티티에 @DeleteDateColumn 데코레이터로 삭제 날짜를 컬럼을 넣어주면 된다.
주의할점은 만약 find 메서드로 리포지토리에서 데이터를 SELECT 할때 WHERE 절 뒤에 항상 "(AND 컬럼명 IS NULL)" 이 붙는 걸 알아야 한다. (sql → SELECT * FROM farm WHERE id = 1 AND deletedAt IS NULL.
만약 삭제된 데이터도 보길 원한다면 withDeleted 옵션을 true 로 해서 find 옵션에 추가해줘야 한다.
find 메서드 중 findBy, findOneBy, findAndCountBy... 와 같이 뒤에 -by 가 들어간 find 메서드는 FindOptionWhere 객체만 인자로 받기 때문에 withDeleted 가 들어갈 수 없는 점은 참고하자.
// entity
@Entity({ name: 'farm', synchronize: false })
export class FarmModel {
@PrimaryGeneratedColumn()
id: number;
@DeleteDateColumn()
deletedAt?: Date;
}
// service.ts
export class FarmService {
constructor(
@InjectRepository(FarmModel)
private readonly farmRepo: Repository<Farm>
){}
}
findAllUser(){
return this.farmRepo.find({
withDeleted: true
});
}
findUserById(id: number){
return this.farmRepo.findOne({
withDeleted: true,
where: { id }
});
}
'Backend > TypeORM' 카테고리의 다른 글
Entity Embadding (0) | 2024.06.07 |
---|---|
다양한 Column 들 (Column Annotation) (1) | 2024.06.07 |
save 와 upsert (0) | 2023.04.25 |
스칼라 서브쿼리 (0) | 2023.04.07 |
(relations: ManyToOne, OneToMany / JoinColumn), typeORM option: logging 으로 실행된 SQL 구문 보기 (0) | 2023.04.06 |
댓글