-
TypeORM의 @ManyToOne과 @OneToManyProject using Nest.js/E-commerce App 2021. 9. 3. 17:38
개요
TypeORM은 관계형 ORM이다. 각각의 인스턴스가 서로를 참조할 수 있다.
product.entity.ts
import { Field, InputType, ObjectType } from '@nestjs/graphql'; import { IsString } from 'class-validator'; import { Column, Entity, ManyToOne } from 'typeorm'; import { CoreEntity } from 'src/common/entities/common.entity'; import { Category } from 'src/categories/entities/category.entity'; @InputType('ProductInputType', { isAbstract: true }) @ObjectType() @Entity() export class Product extends CoreEntity { @Column() @Field((type) => String) @IsString() name: string; @ManyToOne((type) => Category, (category) => category.products, { onDelete: 'SET NULL', }) @Field((type) => Category) category: Category; }
Product 여러 개가 하나의 category를 가리키고 있으므로 @ManyToOne을 사용한다.
category.dto.ts
import { Field, InputType, ObjectType } from '@nestjs/graphql'; import { IsString, MinLength } from 'class-validator'; import { CoreEntity } from 'src/common/entities/common.entity'; import { Product } from 'src/products/entities/product'; import { Column, Entity, OneToMany } from 'typeorm'; @InputType('CategoryInputType', { isAbstract: true }) @ObjectType() @Entity() export class Category extends CoreEntity { @Field((type) => String) @Column({ unique: true }) @IsString() @MinLength(1) name: string; @Field((type) => [Product]) @OneToMany((type) => Product, (products) => products.category) products: Product[]; }
반면에 하나의 category는 여러 개의 products를 가리키므로 @OneToMany를 사용한다. 이로써 서로의 instance를 가리키게 된다.
참고자료
- TypeORM 공식 페이지 : https://typeorm.io/#/many-to-one-one-to-many-relations
'Project using Nest.js > E-commerce App' 카테고리의 다른 글
NestJS Custom repository (0) 2021.09.04 slug를 이용해서 category search 하기 (0) 2021.09.04 nestJS에서 DTO에서 쓰는 PartialType and PickType을 같이 쓸 때 주의할 점 (0) 2021.09.03 nestJS password security (0) 2021.09.03 nest.js authGuard and authUser decorator (0) 2021.09.02