라벨이 TypeORM인 게시물 표시

NestJS TypeORM(SQLite) 을 이용한 One to Many(일대다)

이미지
이번 블로그 글은 일대다(One To Many)를 다루어 볼 것입니다. 위 사진처럼 일대다 테이블을 구성할 예정입니다. 사진1) users table 사진2) posts table 3) Swagger - 유저 조회 3-1) 유저ID를 이용해서 DB조회 4) Swagger - 게시글 조회 4-1) post ID를 이용해서 작성자 정보까지 DB에서 조회 자세한 코드는 아래 GitHub를 참고해 주시기 바랍니다. GitHub Link

NestJS TypeORM(^0.2.45) Migration DB 생성 및 첫 Migration진행 -1

이미지
 위 블로그 글은 TypeORM ^0.2.45버전을 기준으로 작성한 글입니다. npm 설치시 typeorm은 ^0.2.45버전 입니다. // src/db/ormconfig.ts import { TypeOrmModuleOptions } from '@nestjs/typeorm' ; require ( 'dotenv' ). config (); export const typeOrmModuleOptions : TypeOrmModuleOptions = { type : 'postgres' , host : process . env . PG_HOST , port : + process . env . PG_PORT , username : process . env . PG_USERNAME , password : process . env . PG_PASSWORD , database : process . env . PG_DATABASE , autoLoadEntities : true , synchronize : process . env . PG_CHANGE === 'true' , }; export const OrmConfig = { ... typeOrmModuleOptions , migrationsTableName : 'migrations' , entities : [ 'dist/**/*.entity.js' ], migrations : [ 'dist/db/migrations/*.js' ], cli : { migrationsDir : './src/db/migrations' , }, }; export default OrmConfig ; # .env PG_HOST = "localhost" PG_PORT =5434 PG_USERNAME = "a...

NestJS TypeORM Migration Table 수정 및 삭제 -3

이미지
 이번에는 TypeORM에서 migration을 셋팅하고 이후 글에서는 동작을 하도록 하겠습니다. 이전글 : NestJS TypeORM Migration DB 생성 및 첫 Migration진행 -2 진행을 위해서는 NestJS가 설치 되어 있어야 합니다. 아래 링크를 참고해 주시기 바랍니다. 링크 : nest js - install & Create Project from Linux or Ubuntu 해당 글에서는 Postgres을 사용합니다. 다만 진행의 편리성을 위해 Docker Container를 이용하여 사용합니다. 아래 링크를 참고해 주시기 바랍니다. 링크 : Docker-Compose yaml파일을 이용하여 PostgreSQL를 Local로 구축하기 이제 해당 users테이블에 name컬럼을 추가하겠습니다.  1. users테이블에 name추가 // src/users/entities/user.entity.ts import { Column , Entity , PrimaryGeneratedColumn } from 'typeorm' ; @ Entity ( 'users' ) export class User { @ PrimaryGeneratedColumn ( 'increment' ) // 기존 Column id : number ; @ Column ({ unique : true }) // 기존 Column email : string ; @ Column () // 추가된 컬럼 name : string ; } 2. migration:generate를 진행합니다. - migration파일을 생성합니다. $ npm run migration:generate -- [migration 경로] copy migration 경로 : migration파일이 생성될 경로입니다. 처음에 db폴더안에 생성하면 됩니다. 기존 파일과 구분짓기 위해서 migration폴더를 생성...

NestJS TypeORM Migration DB 생성 및 첫 Migration진행 -2

이미지
 이번에는 TypeORM에서 migration을 셋팅하고 이후 글에서는 동작을 하도록 하겠습니다. 이전글 : NestJS TypeORM Migration 셋팅하기 -1 진행을 위해서는 NestJS가 설치 되어 있어야 합니다. 아래 링크를 참고해 주시기 바랍니다. 링크 : nest js - install & Create Project from Linux or Ubuntu 해당 글에서는 Postgres을 사용합니다. 다만 진행의 편리성을 위해 Docker Container를 이용하여 사용합니다. 아래 링크를 참고해 주시기 바랍니다. 링크 : Docker-Compose yaml파일을 이용하여 PostgreSQL를 Local로 구축하기 1. users 모듈을 nest cli로 생성합니다. $ nest g res users copy 2. user.entity.ts파일에 들어가서 Table Column을 설정합니다. // src/users/entities/user.entity.ts import { Column , Entity , PrimaryGeneratedColumn } from 'typeorm' ; @ Entity ( 'users' ) export class User { @ PrimaryGeneratedColumn ( 'increment' ) id : number ; @ Column ({ unique : true }) email : string ; } 3. users.module.ts에서 typeorm을 imports 합니다. // src/users/users.module.ts import { Module } from '@nestjs/common' ; import { TypeOrmModule } from '@nestjs/typeorm' ; import { User } from './entities/user.en...

NestJS TypeORM Migration 셋팅하기 -1

이미지
 이번에는 TypeORM에서 migration을 셋팅하고 이후 글에서는 동작을 하도록 하겠습니다. 진행을 위해서는 NestJS가 설치 되어 있어야 합니다. 아래 링크를 참고해 주시기 바랍니다. 링크 : nest js - install & Create Project from Linux or Ubuntu 해당 글에서는 Postgres을 사용합니다. 다만 진행의 편리성을 위해 Docker Container를 이용하여 사용합니다. 아래 링크를 참고해 주시기 바랍니다. 링크 : Docker-Compose yaml파일을 이용하여 PostgreSQL를 Local로 구축하기 아래에 gitHub링크가 있는데 Clone받으셔서 사용하셔도 됩니다. 1. 프로젝트를 생성합니다. $ nest new typeorm_migration_example copy typeorm을 사용하기 위해서 npm 모듈을 설치합니다. $npm i @nestjs/typeorm typeorm pg copy "@nestjs/typeorm" : "^9.0.1" "pg" : "^8.10.0" "typeorm" : "^0.3.14" 2. 이제 package.json파일에서 script에 migration내용을 추가해야 합니다. "scripts" : { "build" : "nest build" , "format" : "prettier --write \" src/**/*.ts \" \" test/**/*.ts \" " , "start" : "nest start" , "start:dev" : "nest start --watch" , "st...

NestJS Raw SQL문을 TypeORM에서 사용하기(typeorm@0.3.0 version이후)

 기존에는 'getManager().query('[sql문]')'을 작성해서 DB에서 데이터를 받아왔습니다. 하지만 0.3.0버전 이후 getManager가 Deprecated되서 최신버전의 typeorm에서 다른방법으로 NestJS에서 쿼리문을 사용할 방법을 찾았습니다. // src/users/users.service.ts import { Injectable } from '@nestjs/common' ; import { InjectDataSource , InjectRepository } from '@nestjs/typeorm' ; import { Repository , DataSource } from 'typeorm' ; // DataSource를 사용 import { UserEntity } from './entity/user.entity' ; @ Injectable () export class UsersService { constructor ( @ InjectRepository ( UserEntity ) private readonly userEntity : Repository < UserEntity >, // DataSource를 해당 서비스에 주입한다. @ InjectDataSource () private dataSource : DataSource , ){} async getAllUsers (){ // dataSource에 쿼리문을 입력하면 바로 DB에서 해당 쿼리문의 결과가 리턴된다. return await this . dataSource . query ( `SELECT * FROM users LIMIT` ) } } 'DataSource'를 이용하여 쿼리문을 작성하면...

NestJS TypeORM의 Many to Many 구현 4- Join Table에 CASCADE적용하기(부모Record삭제시 자식 Record도 동시 삭제)

이미지
이전글 : NestJS TypeORM의 Many to Many 구현 3- Join Table 구성 안녕하세요. 이번에는 'CASCADE'를 JoinTable에 적용해 보도록 하겠습니다.  사진1) userId 삭제할때 에러 위 SQL문에서 user 테이블의 id 2인 레코드를 지울려면 해당 JoinTable의 연관된 Record를 먼저 삭제를 해야 합니다. 이것을 삭제하고 진행을 할수 있지만 무척 번거로워 지겠죠.   좋은 방법중 하나는 user의 Record를 삭제하면 JoinTable의 연관된 Record도 자동으로 지워지는 것입니다. 그것이 CASCADE입니다. // user_book_join.entity.ts : src/book/entities import { User } from 'src/users/entities/user.entity' ; import { Column , CreateDateColumn , Entity , ManyToOne , PrimaryColumn , } from 'typeorm' ; import { Book } from './book.entity' ; @ Entity () export class User_Book_Join { // 여기서 PrimaryColumn은 userId와 bookId의 조합이다. @ PrimaryColumn ({ nullable : false , }) userId : number ; @ PrimaryColumn ({ nullable : false , }) bookId : number ; @ Column ({ nullable : false , }) book_review : string ; @ CreateDateColumn ({ readonly : true }) created_at : Date ; @ ManyToOne (() => Us...

NestJS TypeORM의 Many to Many 구현 3- Join Table 구성

이미지
이전글 : NestJS TypeORM의 Many to Many 구현 2- 관계형 구성 및 User, Book의 CRUD구현  이제 Join Table을 이용하여 관계를 만들도록 하겠습니다. // user_book_join.entity.ts : src/book/entities import { User } from 'src/users/entities/user.entity' ; import { Column , CreateDateColumn , Entity , ManyToOne , PrimaryColumn , } from 'typeorm' ; import { Book } from './book.entity' ; @ Entity () export class User_Book_Join { // 여기서 PrimaryColumn은 userId와 bookId의 조합이다. @ PrimaryColumn ({ nullable : false , }) userId : number ; @ PrimaryColumn ({ nullable : false , }) bookId : number ; @ Column ({ nullable : false , }) book_review : string ; @ CreateDateColumn ({ readonly : true }) created_at : Date ; @ ManyToOne (() => User , ( user ) => user . id ) user : User ; @ ManyToOne (() => Book , ( book ) => book . id ) book : Book ; }   위 Entity는 user와 book을 연결해 주는 JoinTable 입니다. 다만 그대로 연결하는 것이 아닌 리뷰도 작성하여 저장할수 있습니다. import ...