inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

class-validator

typeorm createQueryBuilder Boolean type 관련

1261

jhkim

작성한 질문수 2

0

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

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

maria db를 사용하고 있으며

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

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

TypeORM NestJS nodejs express

답변 2

1

제로초(조현영)

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

0

jhkim

답변 정말 감사합니다. 관련 힌트를 주셔서 작성을 해보았는데도 작동이 잘 되지 않고 구글링에도 쉽지가 않네요.. 혹시 이유를 알 수 있을까요? 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;
  }

0

제로초(조현영)

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

0

jhkim

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

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

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

0

제로초(조현영)

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

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

강의자료는 어디서 다운받나요?

0

110

3

질문 있습니다.

0

294

3

코드 편집기 확장 프로그램

0

209

2

(질문)비밀 저장소에 접근하기 위한 인증 정보는 로컬 .env에 저장하는지?

0

143

2

(질문)외부 저장소를 통한 환경변수 불러오기 비동기 질문

0

166

3

로그인을 해도 LoggedInGuard쪽에서 false값이 나옵니다.

0

152

2

로그인방법이 고민됩니다.

0

190

2

yarn seed 명령어 실행 시 데이터 삽입 안됨

0

296

4

yarn run db:create 시에 발생하는 데코레이터 오류

0

242

2

npm run db:create 시에 발생하는 decorating 오류

0

231

2

RxJS 디버깅 질문 있습니다.

0

187

3

CacheManager에 대해 질문 있습니다.

0

173

2

로깅은 어떻게 하는게 효율적일까요?

0

224

1

CORS 질문 있습니다.

0

417

2

쿠키 옵션에 대해서 질문 있습니다.

0

184

2

로그아웃 요청이 403 forbidden 에러가 나는데 왜그런걸까요??

0

447

1

401 unauthorized문제

0

286

1

가드의 장점에 대해서 질문이 있습니다.

0

225

1

로그 관리에 대해 질문 있습니다.

0

252

2

CORS 에러 질문 있습니다.

0

318

2

배포 환경 DB 연결 질문 있습니다.

0

411

2

socket io 미 연결 문제 (nest & flutter)

1

1154

3

no elements in sequence 에러 관해서 질문이 있습니다.

0

454

1

start:dev-backup으로 돌리면 핫 리로딩이 되요 정상인가요?

0

322

1