Nest.js
Nestjs-TypeOrm에서 getRawMany 와 getMany
Dev갱이
2023. 10. 11. 15:13
728x90
getRawMany
페이징 처리시 : .limit, .offset 사용
getMany
페이징 처리시 : .take, .skip 사용
TypeORM의 getRawMany() 메서드는 쿼리 결과를 직접적으로 반환하는 반면, getMany() 메서드는 Entity 객체를 반환한다.
TypeORM의 Tree 방식으로 출력가능한 getMany() 메소드 대신 alias 못씀
getMany
let query = await this.postsRepository
.createQueryBuilder('a')
.select(['a.id AS "id"'])
.leftJoin('a.category', 'category')
.leftJoin('a.user', 'user')
.where('a.title LIKE :keyword', { keyword: `%${keyword}%` })
.getMany();
as alias 안먹음
getRawMany
let query = await this.postsRepository
.createQueryBuilder('a')
.select(['a.id AS "tid"'])
.leftJoin('a.category', 'category')
.leftJoin('a.user', 'user')
.where('a.title LIKE :keyword', { keyword: `%${keyword}%` })
.getRawMany();
as alias 먹음
getMany
관계형 entity 그대로 가져올때 사용
{
"id": "b6fc6b0e-7ac9-48ff-aff7-015b8ff02282",
"createdAt": "2023-10-10T06:58:11.086Z",
"updatedAt": "2023-10-10T06:58:11.086Z",
"contents": "contenst10",
"isPublic": true,
"groupId": "75aca3da-1dac-48ef-84b8-cdf1be8fe37d",
"memberId": "31a3ff5a-3715-43ca-a419-2b949a0dee53",
"medias": [
{
"id": "4e292e04-715d-45a0-b5e0-d95261ce0551",
"createdAt": "2023-10-10T06:58:11.112Z",
"updatedAt": "2023-10-10T06:58:11.112Z",
"feedId": "b6fc6b0e-7ac9-48ff-aff7-015b8ff02282",
"url": "test2",
"position": "1"
},
{
"id": "686b03b8-28bd-45c8-aa7b-f67e8d917f69",
"createdAt": "2023-10-10T06:58:11.111Z",
"updatedAt": "2023-10-10T06:58:11.111Z",
"feedId": "b6fc6b0e-7ac9-48ff-aff7-015b8ff02282",
"url": "test",
"position": "0"
}
]
}
getRawMany
쿼리 결과 그대로 가져오고 싶을때 사용
{
"a_id": "b6fc6b0e-7ac9-48ff-aff7-015b8ff02282",
"a_createdAt": "2023-10-10T06:58:11.086Z",
"a_updatedAt": "2023-10-10T06:58:11.086Z",
"a_contents": "contenst10",
"a_isPublic": true,
"a_groupId": "75aca3da-1dac-48ef-84b8-cdf1be8fe37d",
"a_memberId": "31a3ff5a-3715-43ca-a419-2b949a0dee53",
"medias_id": "4e292e04-715d-45a0-b5e0-d95261ce0551",
"medias_createdAt": "2023-10-10T06:58:11.112Z",
"medias_updatedAt": "2023-10-10T06:58:11.112Z",
"medias_feedId": "b6fc6b0e-7ac9-48ff-aff7-015b8ff02282",
"medias_url": "test2",
"medias_position": "1"
},
{
"a_id": "b6fc6b0e-7ac9-48ff-aff7-015b8ff02282",
"a_createdAt": "2023-10-10T06:58:11.086Z",
"a_updatedAt": "2023-10-10T06:58:11.086Z",
"a_contents": "contenst10",
"a_isPublic": true,
"a_groupId": "75aca3da-1dac-48ef-84b8-cdf1be8fe37d",
"a_memberId": "31a3ff5a-3715-43ca-a419-2b949a0dee53",
"medias_id": "686b03b8-28bd-45c8-aa7b-f67e8d917f69",
"medias_createdAt": "2023-10-10T06:58:11.111Z",
"medias_updatedAt": "2023-10-10T06:58:11.111Z",
"medias_feedId": "b6fc6b0e-7ac9-48ff-aff7-015b8ff02282",
"medias_url": "test",
"medias_position": "0"
}
getMany
서브쿼리 안먹음
.addSelect((qb) => {
return qb
.select('b.url')
.from(FeedMediaEntity, 'b')
.where('b.feedId = a.id')
.orderBy('b.position', 'ASC')
.limit(1);
}, 'thumbnail')
아무것도 결과에 안나옴. 당연한듯 반환값이 FeedEntity니까...
getRawMany
.addSelect((qb) => {
return qb
.select('b.url')
.from(FeedMediaEntity, 'b')
.where('b.feedId = a.id')
.orderBy('b.position', 'ASC')
.limit(1);
}, 'thumbnail')
thumbnail 반환 잘나옴. 당연함 쿼리 결과 그대로 출력 해주니까
728x90