typeORM과 queryBuilder

Featured image

typeORM의 옵션

관계된 엔티티를 함께 로드할떄 사용

const category = await repository.findOne({
  where: { id: 1 },
  relations: ['subCategories']
});

특정 컬럼만 선택적으로 가져올떄 사용

const category = await repository.findOne({
  where: { id: 1 },
  select: ['id', 'name']
});

조건을 지정할때 사용

const categories = await repository.find({
  where: { isActive: true }
});

결과를 정렬할때 사용

const categories = await repository.find({
  order: { name: 'ASC' }
});

페이지네이션을 구현할때 사용

const categories = await repository.find({
  skip: 5, //이전 페이지의 항목을 건너뜀
  take: 10 //한 페이지에서 가죠올 할목의 수 
});

쿼리빌더

기본 쿼리빌더 사용

const queryBuilder = repository.createQueryBuilder('category');

조건설정

관계된 엔티티 조인 및 선택

queryBuilder
    .leftJoinAndSelect('category.subCategories', 'subCategory')

특정 컬럼만 선택적으로 가져올떄 사용

queryBuilder
  .select(['category.id', 'category.name'])

조건을 지정할때 사용

queryBuilder
 .where('category.isActive = :isActive', { isActive: true })
 .andWhere('category.name LIKE :name', { name: '%test%' })

결과를 정렬할때 사용

queryBuilder
 .orderBy('category.name', 'DESC')
- skip and Take

페이지네이션을 구현할때 사용
```javascript
queryBuilder
  .skip(5)
  .take(10)

쿼리빌더의 메서드로 조회전 조건을 지정하고 .getMany, .getOne, .getRawMany, getCount로 가져온다

이거 하나만 가져올려면 조건 아래 붙이면 되고 한조건에 대해 여러 값들이 필요허면 쿼리필더의 메서드로 활용해 가져온다

 // getMany: 여러 결과 가져오기
  const categories = await queryBuilder.getMany();

  // getOne: 단일 결과 가져오기
  const category = await queryBuilder.getOne();

  // getRawMany: Raw 데이터로 여러 결과 가져오기
  const rawCategories = await queryBuilder.getRawMany();

  // getCount: 결과 개수 가져오기
  const count = await queryBuilder.getCount();

  // rightJoinAndSelect 예제
  const categoriesWithRightJoin = await getRepository(Category)
    .createQueryBuilder('category')
    .rightJoinAndSelect('category.subCategories', 'subCategory')
    .where('subCategory.isActive = :isActive', { isActive: true })
    .getMany();