• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

typeorm createQueryBuilder Boolean type 관련

22.09.19 09:29 작성 조회수 887

0

안녕하십니까. 강의 정말 잘 듣고 있습니다.

다름이 아니라 강사님의 강의를 듣고 연습을 하고 있습니다.

maria db를 사용하고 있으며

nestjs에서 entity에 @Column type은 bool로 선언했고 해당 db 컬럼도 tinyint(1)로 선언했습니다.

하지만 createQueryBuilder로 select해보니 False는 0 True는 1이 나오던데 혹시 true 또는 False로 나오는 방법이 따로 있을까요?

답변 2

·

답변을 작성해보세요.

0

jhkim님의 프로필

jhkim

질문자

2022.09.19

답변 정말 감사합니다. 관련 힌트를 주셔서 작성을 해보았는데도 작동이 잘 되지 않고 구글링에도 쉽지가 않네요.. 혹시 이유를 알 수 있을까요? findBy로 사용하면 쉽게 true로 나오는데 queryBuilder는 0 또는 1만 계속 나오네요..

 

//--- transformer
import { ValueTransformer } from 'typeorm';

function isNullOrUndefined<T>(
  obj: T | null | undefined,
): obj is null | undefined {
  return typeof obj === 'undefined' || obj === null;
}

export class BooleanTransformer implements ValueTransformer {
  public from(value?: number | null): boolean | undefined {
    if (isNullOrUndefined(value)) {
      return;
    }
    return value ? true : false;
  }

  public to(value?: boolean | null): number | undefined {
    if (isNullOrUndefined(value)) {
      return;
    }
    return value ? 1 : 0;
  }
}

//--- entity
 @Column('tinyint', {
    name: 'is_use',
    nullable: true,
    comment: '사용 여부',
    width: 1,
    transformer: new BooleanTransformer(),
  })
  isUse: boolean | null;

// ---service
async selectUserForTest(): Promise<
    Pick<TbUserEntity, 'username' | 'isUse'>[]
  > {
    const user = await this.userRepository
      .createQueryBuilder()
      .select('username')
      .addSelect('is_use')
      .getRawMany();

    return user;
  }

아.. getRawMany 하셔서 그런 것 같습니다. 그냥 getMany 하셔야 변환이 돌아갑니다.

jhkim님의 프로필

jhkim

질문자

2022.09.20

강사님 정말 답변해주셔서 감사합니다.

getRawMany와 getMany를 찾아보니 data를 불러올 때는 getMany를 사용할 수 없는 것으로 검색되었습니다. (getMany 사용시 user에는 빈배열이 나오네요)

그렇다면 getRawMany로 사용해야 된다고 보면 되는데 json 주고 받을때 boolean 형식을 일반적으로 0 또는 1로 처리하는게 맞을까요?

데이터 불러올 때 getMany 당연히 됩니다.

this.userRepository.createQueryBuilder('user').select(['username, 'isUse']).getMany() 해보세요.

0

@Column에 transformer 메서드 옵션이 있어서 값을 수정할 수 있습니다