이번에는 Type orm의 QuerryBuilder에 대해서 알아보겠다. QuerryBuilder 간단한 CRUD 작업에 진행된다. 쿼리가 복잡해질 경우 ORM이 어떻게 제공되는지 기억이 나지 않거나 나의 ORM 실력이 부족할 때 typeorm이 최대한 sql 문과 최대한 비슷하게 만들어 놓은 것을 QuerryBuilder라고 한다. Repository 속성으로 createQurrybuilder가 있다. Repository 패턴을 싫어하는 분들께서는 manager에도 속성이 존재하기 때문에 다른 곳에서도 사용이 가능하다.
하단에 관계도와 그에 맞는 쿼리문을 작성하여 예시를 들어보겠다.
user 테이블은 workpaces는 one to many 관계이다.
async getWorkspaceMember(url: string, id: number) {
return this.usersRepository
.createQueryBuilder('user') #createQuerryBuilder 속성은 별명이다.
.where('user.id = :id', { id }) #조건문으로 id값의 해당하는 유저를 갖고 온다.
.innerJoin('user.Workspaces', 'workspaces', 'workspaces.url = :url', {
url,
}) #id 값의 해당하는 user의 workspace를 갖고와서 url의 해당하는 값을 갖어온다. 두번째 인자도 alias로 별명이다.
.getOne(); #getOne은 값을 하나만 갖고온다.
자세한 셜명은 코드안에 넣어놨다.
Row 출력은 좀더 DB 출력에 가깝게 갖고 온다.
ID, EMAIL, PASSWORD, Workspace.NAME, Workspace.URL --> getRawMany
ID, EMAIL, PASSWORD, Workspace{NAME: "소날두", URL : "http127.0.0.1"} -->getMany