체인의정석

TypeORM - query builder/ find 함수로 쿼리기능 구현 본문

개발/backend

TypeORM - query builder/ find 함수로 쿼리기능 구현

체인의정석 2021. 10. 25. 17:21
728x90
반응형

nest.js에서 type ORM을 사용할 때 복잡한 구문은 query builder를 사용하여 구현할 수 있다.

 

https://typeorm.io/#/select-query-builder/what-is-querybuilder

 

TypeORM - Amazing ORM for TypeScript and JavaScript (ES7, ES6, ES5). Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server,

 

typeorm.io

이번에는 query builder를 사용하여 조금 더 복잡한 조건절을 구현하는 것을 해보도록 하겠다.

const firstUser = await connection
    .getRepository(User)
    .createQueryBuilder("user")
    .where("user.id = :id", { id: 1 })
    .getOne();

다음과 같은 예시가 나와 있으며, 이러한 예시에 대한 원래 쿼리문은 아래와 같다.

SELECT
    user.id as userId,
    user.firstName as userFirstName,
    user.lastName as userLastName
FROM users user
WHERE user.id = 1

또한 다수의 where 조건절을 사용할 때는 아래와 같이 andWhere를 사용해야 한다고 한다.

const result = await getConnection()
    .createQueryBuilder('user')
    .leftJoinAndSelect('user.linkedSheep', 'linkedSheep')
    .leftJoinAndSelect('user.linkedCow', 'linkedCow')
    .where('user.linkedSheep = :sheepId', { sheepId })
    .andWhere('user.linkedCow = :cowId', { cowId });

 

그러나 이번에는 find 구문을 사용하여 구현을 하기로 하였다. 해당 내용을 아래에서 확인할 수 있었다.

https://orkhan.gitbook.io/typeorm/docs/find-options

 

Find Options - typeorm

Support of lock modes, and SQL statements they translate to, are listed in the table below (blank cell denotes unsupported). When specified lock mode is not supported, a LockNotSupportedOnGivenDriverError error will be thrown.

orkhan.gitbook.io

find 구문으로 구현한 예시는 아래와 같다.

      const transactions = await this.transactionsRepository.find({
        where: {
          from_address: from_address,
          to_address: to_address,
          value: Between(min_value, max_value),
        },
      });

이렇게 하면 쿼리 구문은 , from_Address, to_address와 같고 value 가 min, max 사이인 값만 리턴하여 준다.

728x90
반응형
Comments