본문 바로가기

typescript

TypeOrm 시작하기 (entity, Table생성)

TypeScript와 TypeOrm의 초기 세팅은 이전 포스팅(아래 링크)에서 소개했습니다. 초기 설치와 세팅을 마친 후에 table에 대해 정의하는 폴더가 entity입니다.

 

TypeScript와 Typeorm을 사용해 express 프로젝트 세팅

🧱 초기 설치 npm init : package.json 파일 생성 npm install -g typescript : grobal로 typescript 설치, 처음 프로젝트에서만 설치하면 된다. tsc --init : tsconfig.json 파일 생성 tsconfic.json 파일 수..

juhi.tistory.com

🥾 기본 @데코레이션 종류

import {Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, 
        UpdateDateColumn, OneToOne, OneToMany, ManyToMany, JoinTable } from "typeorm";

@Entity()
export class Example {
    @PrimaryGeneratedColumn()
    id: number;

    @Column({
            nullable: true,
    })
    title: string;

    @CreateDateColumn({
      name: "created_at"
    })
    createdAt: Date;
}
  • @PrimaryGeneratedColumn: 테이블의 기본키를 설정함
  • @Column: 열에 대한 설정을 바꾸고 싶을 때 사용. name, unique, type, nullable 등 열에 대한 설정은 모두 이 부분에서 컨트롤
  • createdAt, updatedAt을 사용하려면 각각에 맞는 데코레이션(@CreateDateColumn, @UpdateDateColumn)을 설정해 주어야 함. 이들의 기본이름은 createdAt이며 이름을 바꿀때는 기본 column의 설정처럼 name옵션을 설정해주어야 한다.

 

🩰 관계 설정 데코레이션

🧍‍♂️ OneToOne

✅ 관계를 맺을 테이블의 entity파일을 import해줘야 합니다.
✅ 이때 Banner테이블에는 외래키 열이 없고, Banner_btn테이블에만 banner_id라는 외래키를 생성 하고 싶다면, Banner_btn.ts파일에서만 JoinColumn설정을 해줍니다.

import { Regions } from "./Region";
import { OneToOne, JoinColumn } from "typeorm"  // 일대일 관계 설정을 위해 필요한 데코레이션 import

아래는 각각의 entity파일 내에서 class를 선언할때 column을 추가하듯이 추가해줘야할 관계 설정입니다.

// Banner_btn.ts
@OneToOne(type => Banners, banner => banner.banner_btn)
@JoinColumn({
    name: 'banner_id'    // 설정 안하면 default: bannerId
})
// Banner.ts
@OneToOne((type) => Banner_btns, (banner_btn) => banner_btn.banner)
banner_btn: Banner_btns;

 

👩🏻‍🤝‍🧑🏻OneToMany & ManyToOne

1 : N 관계에서 1인 테이블 (ex. Banner) - One

@OneToMany((type) => Banner_sub_imgs, (banner_sub_img) => banner_sub_img.banner)
banner_sub_img: Banner_btns[];

1 : N 관계에서 N인 테이블 (ex. Banner_sub_img) - Many

@ManyToOne(type => Banners, banner => banner.banner_sub_img)
@JoinColumn({
    name: 'banner_id'   // default: bannerId
})
banner: Banners;

👨‍👨‍👧‍👦 ManyToMany

// Region.ts
@ManyToMany(type => Banners, banner => banner.region, {
    onDelete: 'CASCADE'
})
banner: Banners[];
// Banner.ts
@ManyToMany(type => Regions, region => region.banner, {
    onDelete: 'CASCADE'
})
@JoinTable({
    name: 'banner_region', // 지정안하면 banner_region_region 
    joinColumns: [
        { name: 'banner_id' }   // 현재 entity파일의 테이블
    ],
    inverseJoinColumns: [
        { name: 'region_id' }   // 관계를 생성하려는 entity파일의 테이블 
    ]
})
region: Regions[];

추가적인 내용은 typeorm docs

 

TypeORM - Amazing ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server,

 

typeorm.io

 

반응형

'typescript' 카테고리의 다른 글

TypeScript와 Typeorm을 사용해 express 프로젝트 세팅  (0) 2021.03.29