@Column({ type: "json" })
- TypeORM에서 JSON 형식의 데이터를 데이터베이스 열(column)에 저장할 때 사용하는 데코레이터이다.
- JSON 데이터는 복잡한 구조를 가지며, 다양한 유형의 데이터를 포함할 수 있다.
- type: "json"을 지정하면, 해당 열에 JSON 형식의 데이터를 저장하고 쿼리할 수 있다.
- 구조화된 데이터를 저장하거나, 특정 형태를 가진 데이터를 저장해야 할 때 json type을 사용한다.
- 복잡한 데이터일 경우 Entity에 넣지 않고 json 타입으로 저장하기도 한다.
- json은 MySQL, PostgreSQL에서 지원하는 데이터 타입이다.
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class UserProfile {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: "json" })
settings: any; // JSON 형식의 데이터를 저장할 필드
}
- @Column({ type: "json" }) 이 데코레이터는 데이터베이스 열이 JSON 형식의 데이터를 저장하도록 설정
- settings: any settings 필드는 JSON 형식의 데이터를 저장한다. TypeScript의 any 타입을 사용하면 JSON 데이터의 구조가 유동적일 때 유용하다.
객체의 배열을 JSON 형식으로 저장
import { Field, InputType, Int, ObjectType } from "@nestjs/graphql";
import { IsNumber, IsString, Length } from "class-validator";
import { CoreEntity } from "src/common/entities/core.entity";
import { Column, Entity, ManyToOne, RelationId } from "typeorm";
import { Restaurant } from "./restaurant.entity";
@InputType("DishChoiceInputType", { isAbstract: true })
@ObjectType()
export class DishChoice {
@Field(() => String)
name: string;
@Field(() => Int, { nullable: true })
extra?: number;
}
@InputType("DishOptionInputType", { isAbstract: true })
@ObjectType()
export class DishOption {
@Field(() => String)
name: string;
@Field(() => [DishChoice], { nullable: true })
choices?: DishChoice[];
@Field(() => Int, { nullable: true })
extra?: number;
}
@InputType("DishInputType", { isAbstract: true })
@ObjectType()
@Entity()
export class Dish extends CoreEntity {
@Field(() => String)
@Column()
@IsString()
@Length(5)
name: string;
@Field(() => Int)
@Column()
@IsNumber()
price: number;
@Field(() => String, { nullable: true })
@Column({ nullable: true })
@IsString()
photo: string;
@Field(() => String)
@Column()
@Length(5, 140)
description: string;
@Field(() => Restaurant)
@ManyToOne(() => Restaurant, (restaurant) => restaurant.menu, {
onDelete: "CASCADE",
})
restaurant: Restaurant;
@RelationId((dish: Dish) => dish.restaurant)
restaurantId: number;
@Field(() => [DishOption], { nullable: true })
@Column({ type: "json", nullable: true })
options?: DishOption[];
}
- options 필드는 DishOption 객체의 배열을 JSON 형식으로 저장할 수 있도록 설정
- Dish 엔티티의 options 필드가 JSON 형식으로 데이터베이스에 저장
- JSON 형식으로 저장하면, DishOption 객체의 배열을 쉽게 저장하고 조회할 수 있다.
'Database > TypeORM' 카테고리의 다른 글
Relations 정리 Many-to-Many, @JoinTable() (0) | 2024.08.06 |
---|---|
@RelationId, 특정 필드에 대한 외래 키 값만 가져오기 (0) | 2024.08.02 |
Relations 정리 One-to-One, @JoinColumn() (0) | 2024.08.02 |
Relations 정리 OneToMany, ManyToOne (0) | 2024.08.02 |
EntityRepository - deprecated 되었다. (0) | 2024.08.02 |