본문 바로가기
Backend/TypeORM

@DeleteDateColumn 은 AND 절을 마음대로 추가한다

by 찬찬2 2024. 6. 26.

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 }
   });
}

댓글