반응형
Typeorm을 관계를 설정할때 @Many-To-Many로 관계를 설정할때가 있다.
Typeorm 공식문서를 살펴보면,
기본적으로 @Many-To-Many는 A가 B의 여러 인스턴스를 포함하고, B가 A의 여러 인스턴스를 포함하는 관계라고 정의하고 있다.
//category.entity.ts
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
@Entity()
export class Category {
@PrimaryGeneratedColumn()
id: number
@Column()
name: string
}
//question.entity.ts
import {
Entity,
PrimaryGeneratedColumn,
Column,
ManyToMany,
JoinTable,
} from "typeorm"
import { Category } from "./Category"
@Entity()
export class Question {
@PrimaryGeneratedColumn()
id: number
@Column()
title: string
@Column()
text: string
@ManyToMany(() => Category)
@JoinTable()
categories: Category[]
}
위의 코드처럼 category테이블과 question테이블이 @Many-To-Many관계로 구성되어있다.
@JoinTable()을 통해 서로의 Id로 구성된 테이블이 자동으로 생성된다. 이 테이블은 별도의 service.ts와 controller.ts파일이 존재하지 않아서 개발자가 직접 테이블을 제어하기 힘들다는 단점이있다.
이러한 경우 @One-To-Many, @Many-To-One의 관계를 통해 직접 테이블을 생성해 주고 새로움 컬럼도 추가할 수 있다.
@JoinTable()로 생성된 테이블과 달리 questionToCategory.entity.ts로 직접 접근할 수 있고 명확하게 파악도 쉬워진다.
//category.entity.ts
@OneToMany(() => questionToCategory, questionToCategory => questionToCategory.category)
questionToCategories: QuestionToCategory[];
//question.entity.ts
@OneToMany(() => QuestionToCategory, questionToCategory => questionToCategory.question)
questionToCategories: QuestionToCategory[];
//questionToCategory.entity.ts
import { Entity, Column, ManyToOne, PrimaryGeneratedColumn } from "typeorm"
import { Question } from "./question"
import { Category } from "./category"
@Entity()
export class QuestionToCategory {
@PrimaryGeneratedColumn()
questionToCategoryId: number
@Column()
questionId: number
@Column()
categoryId: number
@Column()
order: number
@ManyToOne(() => Question, (question) => question.questionToCategories)
question: Question
@ManyToOne(() => Category, (category) => category.questionToCategories)
category: Category
}
반응형
'TIL' 카테고리의 다른 글
[TIL] Elastic Load Balancer 기본 개념 (0) | 2024.03.27 |
---|---|
[TIL] TCP프로토콜과 UDP프로토콜 (0) | 2024.03.25 |
[TIL] 프로그래머스 (정수 내림차순으로 배치하기) (0) | 2024.03.21 |
[TIL] 프로그래머스 (없는 숫자 더하기) (0) | 2024.03.20 |
[TIL] 프로그래머스 (x만큼 간격이 있는 n개의 숫자) (0) | 2024.03.20 |
댓글