둘 이상의 테이블에서 설정된 연결로 일반 테이블을 기초로 하여 기본키나 외래키를 포함하는데 크게 3가지 유형이 있다.
- 1대1 -
@OneToOne
을 사용하며 기본테이블과 외부 테이블에서의 관련 행을 하나만 사용한다.- 1대다 또는 다대1 -
@OneToMany
또는@ManyToOne
을 사용하고 기본 테이블이나 외부 테이블 중 하나는 둘 이상의 관련 행이 있는 것이다.- 다대다 - 기본 테이블과 외부 테이블을 여러 행 연결한 것으로
@ManyToMany
를 사용한다.
가 있다.
import { Entity, Column, PrimaryGeneratedColumn, OneToMany }
from 'typeorm';
import { Photo } from '../photos/photo.entity';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
@Column({ default: true })
isActive: boolean;
@OneToMany(type => Photo, photo => photo.user)
photos: Photo[];
}
연결을 하고 싶다면 엔티티 생성 부분에서 데코레이터를 사용하고 연결을 시킨 다는 것을 정의시켜준다.
항상 수동으로 연결하기가 힘들다면 이 기능을 사용할 수 있다.
autoLoadEntities
를 true
로 설정해준다면
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
...
autoLoadEntities: true,
}),
],
})
export class AppModule {}
엔티티와 그 행을 데코레이터를 이용하여 모델에서 정의할 수 있다. 하지만 사람들이 엔티티를 정의하는 것을 선호하고 그것들의 행을 EntitySchemas
를 이용하여 분할한다.
import { EntitySchema } from 'typeorm';
import { User } from './user.entity';
export const UserSchema = new EntitySchema<User>({
name: 'User',
target: User,
columns: {
id: {
type: Number,
primary: true,
generated: true,
},
firstName: {
type: String,
},
lastName: {
type: String,
},
isActive: {
type: Boolean,
default: true,
},
},
relations: {
photos: {
type: 'one-to-many',
target: 'Photo', // PhotoSchema이름을 설정을 이렇게함
},
},
});
네스트는 엔티티스키마를 사용하는 것을 가능하게 해줍니다.