본문 바로가기

ORM

PRISMA GraphQL NestJS에서 RawQuery 사용하기

문제 상황:

ORM(Object Relational Mapping) 을 사용할 때 복잡한 쿼리를 구현하기에는 ORM의 메소드만으로는 한계를 느낄 때가 자주 있음

Prisma를 사용하면서 orm의 구현 한계를 느꼈고 raw query를 prisma 에 적용할 수 있는 방법을 찾음

 

 

 

프로젝트 스펙: 

NestJS + Prisma(Code first) + GraphQL + MariaDB + Apollo Server

 

 

 

디비 구조: 

 

user table 과 department table 이 n:1로 맵핑되어 있다

 

 

 

prisma orm 사용: 

 

다음은 userId 가 1인 사람의 user 정보와 department 정보를 모두 가져오는 prisma orm 메소드이다.

 

 

결과값은 다음과 같다

 

 

name이 '일길동'인 사람은 name이 'a_dept' 라는 회사와 맵핑되어 있으므로

해당 회사의 정보까지 include 메소드를 통해 가져와졌다

 

 

 

prisma raw query 사용: 

 

다음과 같이 쿼리를 직접 사용해서 위 orm 으로 가져온 결과값가 동일한 값을 가져올 수 있다 

위에서 선언한 userId변수값은 템플릿 리터럴( ${변수명} )을 사용해서 가져오자

 

 

 

 

결과값은 배열로 리턴된다 또한 select 절에 alias 를 사용해서 별칭을 지정할 수도 있어 내가 원하는 키값으로 리턴받을 수 있다.

 

 

주의할 점 1

쿼리에 limit 1을 걸어 객체 1개를 리턴하도록 짜도 리턴되는 값은 객체 1개가 아닌 길이가 1인 배열로 리턴되므로 항상 주의하자

 

주의할 점 2

나는 가져올 데이터를 모두 select 절에 써줬지만 만약 *(애스터리스크) 로 전체 데이터를 가져올 때

테이블이 다르더라도 키값이 동일하면 한개의 테이블에서만 데이터가 가져와짐에 주의하자

 

 

 

끄읏 -!

 

'ORM' 카테고리의 다른 글

PRISMA GraphQL NestJS에서 Raw Query in 절 조건문 사용  (0) 2023.06.17