문제 상황:
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 |
---|