NestJS에서 TypeORM을 이용하여 entity 관계를 설정하는 방법에 대해 정리해보고자 한다.
우선, TypeORM에서 어떻게 하라고 시키고 있는지 알아보자. (공식문서 참조)
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm"
import { User } from "./User"
@Entity()
export class Photo {
@PrimaryGeneratedColumn()
id: number
@Column()
url: string
@ManyToOne(() => User, (user) => user.photos)
user: User
}
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm"
import { Photo } from "./Photo"
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
name: string
@OneToMany(() => Photo, (photo) => photo.user)
photos: Photo[]
}
위 의 코드는 아래와 같은 table을 만들게 된다.
+-------------+--------------+----------------------------+
| photo |
+-------------+--------------+----------------------------+
| id | int(11) | PRIMARY KEY AUTO_INCREMENT |
| url | varchar(255) | |
| userId | int(11) | FOREIGN KEY |
+-------------+--------------+----------------------------+
+-------------+--------------+----------------------------+
| user |
+-------------+--------------+----------------------------+
| id | int(11) | PRIMARY KEY AUTO_INCREMENT |
| name | varchar(255) | |
+-------------+--------------+----------------------------+
ManyToOne의 경우 관계정의가 필수적이지만, OneToMany의 경우 생략이 가능하다.
따라서 다음과 같이 정의 할 수 있을 것이다.
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm"
import { User } from "./User"
@Entity()
export class Photo {
@PrimaryGeneratedColumn()
id: number
@Column()
url: string
@ManyToOne(() => User, (user) => user.idx)
user: User
}
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm"
import { Photo } from "./Photo"
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number
@Column()
name: string
}
TypeORM은 관계를 정의해주면, @JoinColumn을 생략하여도 자동적으로 칼럼을 생성해준다.
따라서 위의 entity를 이용하면, photo 테이블에 userId라는 JoinColumn이 자동적으로 생성 될 것이다.
만약, 칼럼명을 userId가 아닌 내가 원하는 대로 정하고 싶다면 아래처럼 @JoinColumn을 명시해주면서 정의해주면 된다.
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm"
import { User } from "./User"
@Entity()
export class Photo {
@PrimaryGeneratedColumn()
id: number
@Column()
url: string
@ManyToOne(() => User, (user) => user.idx)
@JoinColumn({ name: 'custom_col_name'})
custom_col_name: User
}
'TypeORM' 카테고리의 다른 글
[TypeORM] bulk insert (한번에 여러 칼럼 udpate) (0) | 2022.09.26 |
---|---|
entity 와 db table 비교하여 migration 파일 생성 (feat. nestjs, mysql, typeorm) (0) | 2022.05.25 |
TypeORM - 기초를 탄탄하게 (0) | 2022.05.02 |
테이블 간 관계 설정 (0) | 2022.04.01 |