[TIL] TypeORM onDelete: 'CASCADE'

sooyoung choi·2024년 1월 4일
1

TypeORM

목록 보기
1/1
post-thumbnail

과제 중에 데이터베이스 하나를 삭제하려면 연관되어있는 컬럼들을 찾아서 일일이 다 삭제해줬어야 했다.

예를 들어, 유저가 삭제되었을때 유저와 관련된 포인트, 예매내역들을 삭제 시켜줘야한다.
일일이 쿼리를 삭제하는 것이 아닌 typeorm에서 제공되는 cascade를 활용해보자!

user entity

...

@Index('email', ['email'], { unique: true })
@Entity({
  name: 'user',
})
export class User {
  @PrimaryGeneratedColumn({ name: 'user_id' })
  id: number;

...

//  유저와 결제는 1:N 관계

  @OneToMany(() => Payment, (payment) => payment.user_id)
  payments: Payment[];

...

payment entity

...

@Entity({
  name: 'payment',
})
export class Payment {
  @PrimaryGeneratedColumn({ name: 'payment_id' })
  id: number;

  @ManyToOne(() => User, (user) => user.id)
  user: User;
...


onDelete: 'CASCADE' 추가

  • payment가 종속되어 있으니 payment entity에서 user와 관계설정 해놓은 부분에 onDelete: 'CASCADE' 추가해주기
...

@Entity({
  name: 'payment',
})
export class Payment {
  @PrimaryGeneratedColumn({ name: 'payment_id' })
  id: number;

  @ManyToOne(() => User, (user) => user.id, { onDelete: 'CASCADE' })
  user: User;

...

0개의 댓글