페이지네이션을 구현하기 위해 take, skip을 사용했었다.
https://typeorm.biunav.com/en/select-query-builder.html#adding-group-by-expression
복잡한 쿼리 구문에는 limit과 offset이 잘 작동하지 않는다는 typeOrm문서를 보고 take과 skip을 사용했다.
하지만 나는 typeorm querybuilder에서 getRawMany()로 raw data를 반환하기 때문에 skip과 take가 제대로 작동하지 않았다.
https://stackoverflow.com/questions/57819937/typeorm-select-all-rows-but-limit-25
stackoverflow를 찾아본 결과 raw데이터를 반환할 때는 다시 limit과 offset를 사용해야 한대서 바꿔 보니 정상적으로 작동했다.
코드 변경 전 :
return query
.take(perPage)
.skip(perPage * (page - 1))
.orderBy(`${sort === 'avg' ? 'course_avg' : 'num_review'}`, 'DESC')
.getRawMany();
코드 변경 후:
return query
.orderBy(`${sort === 'avg' ? 'course_avg' : 'num_review'}`, 'DESC')
.limit(perPage)
.offset(perPage * (page - 1))
.getRawMany();