• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

createQueryBuilder

21.08.31 06:44 작성 조회수 368

0

아직 TypeORM 가 조금 헤깔려서 질문 남깁니다. ㅠ 

board.id = comments.boardId 을 join 걸어야하는데, 

erd 가 이렇게 구성되어있구요 .

Board entity 

Comments entity 

이렇게 구성되어져있습니다 ! 

boardId 를 가지고 board 의 작성 내용과 그밑에 comments 들을 들고올려고 하는데요 .

어떻게 작성 할수있을까요?? ^^ ; ㅎ 

답변 2

·

답변을 작성해보세요.

0

SJ님의 프로필

SJ

2021.09.01

1 https://typeorm.io/#/select-query-builder

위의 사이트에서 해당하는 글을 읽어봤는데여 .

3번째 인수에 조건을  거는것과 , where 문의 차이엔 어떤 차이가 있을까영 ?

2. 인자값에 타입지정은 자주 하셨지만 return 타입엔 비교적 타입추론을 자주 하셨더라구요 . ㅎ 특별한 이유가 있을까요 ? ㅎ 

1. 3번째 인수에 조건을 거는 것은 이미 join한 후에 다시 조건을 걸어 필터링하는 것이라고 보시면 됩니다. 그래서 board에 comment를 조인한 후 boardId로 필터링하는 게 의미가 없습니다. comment의 boardid는 전부다 같은 boardId거든요.

2. service 인자는 타입추론이 아예 안 됩니다. return은 타입추론이 됩니다.

SJ님의 프로필

SJ

2021.09.02

친절한 답변 감사합니다 :) 

0

데이터까지 가져오려면 innerJoinAndSelect를 쓰셔야 합니다.

innerJoinAndSelect('board.BoardToComments', 'commentsOfBoard')

3번째 인수는 조건인데 현재 상황에서 필터링하는 게 없으므로 따로 조건을 넣을 필요는 없습니다.

SJ님의 프로필

SJ

2021.08.31

아아 해당하는 만약 board 에 대한 comments 들과 board 데이터를 가져와야한다하면

그 해당하는 board 를 알기위해 3번째 인수에 조건을 걸어줘야하죠?

1. 제로초님이 네이밍 구성을 길게하라고해서 길게 적을려고 하는데 저기서 네이밍이라던지 좀더 수정해야될게 뭐가있을까요 ?

2. async 에서 return 타입은 무엇으로 하시나여 ???

아뇨. boardId 조건은 where에 적는 겁니다. commentsOfBoard의 BoardId는 전부 해당 board의 아이디라서 의미가 없습니다.

저라면 BoardToComments 대신에 그냥 Comments 했을 것 같습니다(Entity쪽 수정) 그래야 board.Comments로 자연스럽습니다.

commentsOfBoard도 그냥 comments만 쓰고요. 읽을 때 중복없이 자연스러운게 좋습니다.

return 타입은 알아서 추론돼서 직접 적으실 필요 없습니다(getManyAndCount의 리턴타입).