[TIL] NestJS 공부 19일차

정인교·2021년 6월 22일
0

TIL(Today I Learned)

목록 보기
30/67
post-thumbnail

관계

둘 이상의 테이블에서 설정된 연결로 일반 테이블을 기초로 하여 기본키나 외래키를 포함하는데 크게 3가지 유형이 있다.

  1. 1대1 - @OneToOne을 사용하며 기본테이블과 외부 테이블에서의 관련 행을 하나만 사용한다.
  2. 1대다 또는 다대1 - @OneToMany 또는 @ManyToOne을 사용하고 기본 테이블이나 외부 테이블 중 하나는 둘 이상의 관련 행이 있는 것이다.
  3. 다대다 - 기본 테이블과 외부 테이블을 여러 행 연결한 것으로 @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[];
}

연결을 하고 싶다면 엔티티 생성 부분에서 데코레이터를 사용하고 연결을 시킨 다는 것을 정의시켜준다.

엔티티 자동 로드

항상 수동으로 연결하기가 힘들다면 이 기능을 사용할 수 있다.
autoLoadEntitiestrue로 설정해준다면

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이름을 설정을 이렇게함
    },
  },
});

네스트는 엔티티스키마를 사용하는 것을 가능하게 해줍니다.

profile
백엔드 개발자 정인교입니다!

0개의 댓글