Node.js/NestJS
[NestJS, TypeORM] 배열, 객체 데이터를 database에 저장하는 법
왈왈디
2023. 5. 11. 15:21
728x90
* 개발 환경: Typescript, NestJS, Typeorm, MySql
NestJS 프레임워크로 Typeorm을 통해 MySql database를 사용하려고 하던 중, entity.ts 파일에서 아래와 같은 에러가 발생했다.
'data type array is not supported by mysql database'
//error가 났던 movie.entity.ts 파일
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Movie {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
year: number;
@Column()
genres: string[]; //error 발생
}
배열 형태의 데이터는 mysql에서 받아들일 수 없다는 내용이다.
처음에는 배열을 string형태로 변환해야 하나 싶었다.
`[]` 배열을 백틱으로 감싼 형태로 일일이 변경하고 실행시켜 보니 에러는 나지 않았다.
하지만 찜찜한 마음이 들어 다른 방법이 없을까 하던 중
Typeorm 공식 문서에서 좋은 방법을 발견했다.
@Column() 데코레이터의 인자로 'simple-array'를 넣어주는 방법이다.
이렇게 하면, 데이터 타입을 배열로 지정해도 아무 문제 없이 database에 저장하고 호출하는 게 가능하다.
array 외에도, 'simple-json', 'simple-enum'이라고 입력해주면 json(객체)과 enum도 사용 가능하다.
수정한 코드는 아래와 같다.
//수정된 movie.enitity.ts 파일
import { Column, Entity,PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Movie {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
year: number;
@Column('simple-array')
genres: string[];
}
이렇게 하면 database에 들어갈 때도 문제가 없고, 다른 파일들에서 편하게 'genres'의 type을 string[] 배열로 선언할 수 있다.
728x90