반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 프로그래머스
- 레벨 1
- 프로그래머스 레벨 2
- 크롤링
- 타입스크립트
- Algorithm
- 가천대
- HTTP 완벽 가이드
- TCP
- 자바스크립트
- BFS
- Crawling
- type challenge
- 소켓
- dp
- HTTP
- typescript
- 알고리즘
- dfs
- Node.js
- Nestjs
- 백준
- ip
- 그래프
- javascript
- socket
- 쉬운 문제
- 수학
- 문자열
- 타입 챌린지
Archives
- Today
- Total
kakasoo
쿼리빌더를 "조금" 더 완벽하게 해줄 setFindOptions 본문
반응형
TypeORM에는 setFindOptions 라는 메서드가 있고, 이걸 활용하면 할 수 있는 일이 참 많습니다.
하지만 공식문서에는 이 메서드에 대한 소개가 전혀 없는데요, 이건 TypeORM이 반성해야 할 부분 같습니다.
이 메서드는, QueryBuilder가 가진 문제점을 부분적이나마 해소해줍니다.
코드를 통해 보겠습니다.
QueryBuilder 사용법
const posts = await connection
.createQueryBuilder(Post, "post")
.where('post.author IS NULL')
.orderBy("post.id", "ASC")
.getMany()
post를 조회할 때 우리는 where문과 order를 where, orderBy라는 메서드를 통해 해결할 수 있습니다.
하지만 여기에는 조금 문제가 있는데요, 이렇게 사용할 경우 단순한 string으로 표현되다보니 런타임에서는 에러를 잡지 못한다는 문제가 발생합니다.
테스트가 자리잡지 않는 개발 조직에서는, 이런 문제는 조금 심각할 수 있을 거 같은데요,
놀랍게도 TypeORM은 이런 문제를 해결하기 위한 메서드가 2019년부터 있었습니다.
왜 이게 공식문서에는 제외되어 있던 걸까요?
setFindOptions를 통한 해결
const posts = await connection
.createQueryBuilder(Post, "post")
.setFindOptions({
where: {
author: IsNull(),
},
})
.orderBy("post.id", "ASC")
.getMany()
const posts = await connection
.createQueryBuilder(Post, "post")
.setFindOptions({
where: {
author: IsNull(),
},
order: {
id: "ASC",
},
})
.getMany()
setFindOptions 메서드는 조회에 필요한 조건들을 모두 객체 상태로 관리할 수 있게 해줍니다.
이게 있다면 굳이 Repository를 강제할 필요도 없어, 타입을 체크하는 데에 무척이나 큰 도움이 될 거 같습니다.
이 내용은 현재 사용하는 TypeORM 버전 대부분에서 사용 가능할 거 같습니다.
반응형
'프로그래밍 > NestJS' 카테고리의 다른 글
Response DTO를 이용한 응답 직렬화 (Serialization) (0) | 2022.11.27 |
---|---|
[TypeORM] Null이 있는 상황에서의 orderBy (0) | 2022.11.27 |
Repository 패턴에서 조인 대상이 Null인 경우에 대한 체크 (0) | 2022.09.12 |
TypeORM에서의 명시적인 제약조건 이름 선언 (0) | 2022.09.12 |
Module, Controller, Service, Repository (0) | 2022.07.17 |