-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
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로 나오는 방법이 따로 있을까요?
답변을 작성해보세요.
0
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;
}
jhkim
질문자2022.09.20
강사님 정말 답변해주셔서 감사합니다.
getRawMany와 getMany를 찾아보니 data를 불러올 때는 getMany를 사용할 수 없는 것으로 검색되었습니다. (getMany 사용시 user에는 빈배열이 나오네요)
그렇다면 getRawMany로 사용해야 된다고 보면 되는데 json 주고 받을때 boolean 형식을 일반적으로 0 또는 1로 처리하는게 맞을까요?
조현영
지식공유자2022.09.20
데이터 불러올 때 getMany 당연히 됩니다.
this.userRepository.createQueryBuilder('user').select(['username, 'isUse']).getMany() 해보세요.
0
답변 2