본문 바로가기

Backend/TypeORM6

@DeleteDateColumn 은 AND 절을 마음대로 추가한다 soft delete 을 할때 엔티티에 @DeleteDateColumn 데코레이터로 삭제 날짜를 컬럼을 넣어주면 된다. 주의할점은 만약 find 메서드로 리포지토리에서 데이터를 SELECT 할때 WHERE 절 뒤에 항상 "(AND 컬럼명 IS NULL)" 이 붙는 걸 알아야 한다. (sql → SELECT * FROM farm WHERE id = 1 AND deletedAt IS NULL. 만약 삭제된 데이터도 보길 원한다면 withDeleted 옵션을 true 로 해서 find 옵션에 추가해줘야 한다. find 메서드 중 findBy, findOneBy, findAndCountBy... 와 같이 뒤에 -by 가 들어간 find 메서드는 FindOptionWhere 객체만 인자로 받기 때문에 withDe.. 2024. 6. 26.
Entity Embadding import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";// Entity 간 중복되는 column 이 있을 경우 아래와 같이 @Entity 데코레이터가 없는 일반 class로 만들어 사용할 수 있다.export class Name { @Column() first: string; @Column() last: string;}@Entity()export class StudentModel { @PrimaryGeneratedColumn() id: number; // 아래와 같이 @Column 데코레이터의 메타데이터로 익명함수의 리턴값으로 // 공통으로 사용되는 column이 들어있는 class 를 반환.. 2024. 6. 7.
다양한 Column 들 (Column Annotation) import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, VersionColumn, Generated } from 'typeorm';export enum Role { USER = 'user', ADMIN = 'admin'}@Entity()export class UserModel { @PrimaryGeneratedColumn() id: number; @Column({ type: 'varchar', name: 'title', length: 300, nullable: true, update: true, // true 면 처음 저장할떄만 값 지정 가능. 이후에는 값 변경 안됨.. 2024. 6. 7.
save 와 upsert MySQL로 작업을 하던 시절 데이터베이스에 데이터를 저장시키기 위해 SQL 키워드 "INSERT"를 사용했다. 그리고 상황에 따라 데이터가 있으면 UPDATE, 없으면 INSERT하는 UPSERT에 대한 개념을 알게되었다. 새로운 직장에서 typeORM을 공부하며 CRUD를 구현하던 중 데이터를 저장하는 상황에서 나는 단순히 INSERT를 먼저 생각하게 되었고, 공식문서에서 Repository API 목록을 살펴보니 INSERT를 실행시킬 수 있는 API가 세 가지가 있더라... ① save ② insert ③ update ④ upsert 공식문서에서 정의하는 내용을 살펴 보면... ① saveSaves a given entity or array of entities. If the entity alre.. 2023. 4. 25.
스칼라 서브쿼리 테이블은 이전 게시글에서 사용해했던 pokemon 과 ability 이다. PRIMARY_ABILITY, SUB_ABILITY 값으로 ability 테이블 NAME 컬럼에서 이름을 가져오고 싶다. 우선 쿼리를 먼저 그려보면, SELECT "NAME", "NUMBER", (SELECT "NAME" FROM ability WHERE ability."ID" = pokemon."PRIMARY_ABILITY" ) AS p_ability, (SELECT "NAME" FROM ability WHERE ability."ID" = pokemon."SUB_ABILITY" ) AS s_abilityFROM pokemon; 이러하다. 정말 간단하지 않은가. 결과는,  원하는 형태로 잘나왔다. 그렇다면 스칼라 서브쿼리를 Ty.. 2023. 4. 7.
(relations: ManyToOne, OneToMany / JoinColumn), typeORM option: logging 으로 실행된 SQL 구문 보기 개발자 포지션으로 두 번째 회사인 이 곳에서... 새로운 기술스텍을 많이 발견하고 있는 중이다. 그 중 데이터베이스와 관련된 TypeORM을 공부하면서 정리해보자. 자... Type + ORM 에서 ORM이란, Object Relational Mapping 의 약자이다. 그리고 이것은 기술이다.어떤 기술이냐? 객체지향 프로그래밍과 관계형 데이터 베이스를 연결해주는 기술이라고 구글 선생님께서 말하신다. 즉, ORM은 SQL과 일반적으로 코드 에디터(Visual Studio Code 같은...) 우리가 작업하는 코드(자바스크립트)를 연결시켜준다고 이해하면 쉬울 것 같다. 뭐, 더 거창한 설명이 분명히 있을 것이다. 그리고 ORM 앞에 붙은 Type은 자바스크립트의 확장개념인 TypeScript를 말한다. 개.. 2023. 4. 6.