TypeORM - getMany() vs getRawMany()

오픈소스·2023년 5월 6일
0

https://orkhan.gitbook.io/typeorm/docs/select-query-builder#getting-values-using-querybuilder

There are two types of results you can get using select query builder: entities or raw results. Most of the time, you need to select real entities from your database, for example, users. For this purpose, you use getOne and getMany. But sometimes you need to select some specific data, let's say the sum of all user photos. This data is not an entity, it's called raw data. To get raw data, you use getRawOne and getRawMany.

https://seungtaek-overflow.tistory.com/19

getOne(), getMany()를 이용해서 데이터를 조회할 때 리턴되는 객체의 타입은 항상 엔티티 클래스의 인스턴스이다. 그렇기 때문에 특정 컬럼들만 가져오는 경우, 잠재적인 문제가 일어날 수 있다.

조회 결과를 엔티티 인스턴스로 변환하지 않기 위해서는 getRawMany() 메서드를 사용할 수 있다.

https://kuidoli.tistory.com/3

TypeORM 소스코드를 보면 getMany 와 getRawMany 의 리턴 타입이 서로 다르다.
getMany 는 Promise< Entity[] > 를 리턴하고
getRawMany 는 Promise< T[] > 를 리턴한다.

async getMany(): Promise<Entity[]> {}
async getRawMany<T = any>(): Promise<T[]> {}

다만 이때 getMany 는 ListID 외에 select 에 포함하지 않은 MyList 엔티티의 다른 컬럼 값에도 접근이 가능하다.
이때 실제로는 select 에 포함되지 않아서 undefined 가 나온다.
그리고 left join 에 활용한 YourList 엔티티의 컬럼은 결과물에 담기지 않는다.

getMany 에서 alias 는 적용할 수 없다.
getRawMany 는 alias 로 설정한 값으로 나온다.

https://velog.io/@hkja0111/NestJS-08-TypeORM-QueryBuilder

GetRawMany()가 아니라 그냥 GetMany()를 사용하면 다음과 같이 LeftJoin의 Image 정보는 빠지는 것을 알 수 있습니다. GetMany()는 Entity의 데이터만 가져오는데,

0개의 댓글