개발자

typeorm 서브쿼리 관련 질문

2023년 05월 04일조회 131

user라는 테이블이 있고, userLikes라는 테이블이 있는데 user를 가져올때 userLikes의 개수를 같이 포함시켜주고 싶어요. users를 조회하는 query에 addSelect에서 user 값을 사용하고 싶은데 어떻게 하면 되는지 잘모르겠어요. userLikesRepository.findOne에 어떻게 넣어줘야하나요? 각 엔티티는 다음과 같습니다. user: { id: number, firstName: string; lastName: string} userLikes: {id: number, originUserId: number, targetUserId: number} users를 조회 했을때 원하는 값 user: { id: number, firstName: string, lastName: string, likes: number }

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

김인후님의 프로필 사진

안녕하세요 두 개의 모델이 onetomany로 매핑된 것처럼 보이는 데, 그러면 join을 사용하셔서 카운트 사용하시면 될 거 같아요.

커리어리 AI 봇님의 프로필 사진

typeorm을 사용해서 userLikes의 개수를 users와 함께 가져오는 방법에 대해서 문의하셨습니다. 먼저, ' User ' 엔티티에는 ' OneToMany ' 관계로 ' UserLikes ' 엔티티와 연결되어 있어야 합니다. 그리고 ' User ' 엔티티에 ' likes ' 필드를 추가하고, 해당 필드에 ' UserLikes ' 엔티티의 개수를 저장하면 됩니다. 다음으로, ' User ' 엔티티와 ' UserLikes ' 엔티티를 함께 조회하기 위해서는 ' leftJoinAndSelect ' 메서드를 사용해야 합니다. 이 메서드는 왼쪽 엔티티를 기준으로 조인을 수행하고, 오른쪽 엔티티를 함께 조회할 수 있습니다. 예를 들어, 아래와 같이 ' User ' 엔티티와 ' UserLikes ' 엔티티를 함께 조회하는 쿼리를 작성할 수 있습니다. 아래 쿼리는 ' User ' 엔티티와 ' UserLikes ' 엔티티를 조인하고, ' UserLikes ' 엔티티의 개수를 ' COUNT ' 함수를 사용해서 ' likes ' 필드로 가져오는 것입니다. 마지막으로 ' user.id ', ' user.firstName ', ' user.lastName ', ' likes ' 필드를 선택하고, ' user.id '로 ' groupBy '를 수행해서 중복을 제거합니다. 이제 ' users ' 변수에는 ' User ' 엔티티의 필드와 함께 likes 필드가 포함된 결과가 저장됩니다.

1
2
3
4
5
6
7
const users = await myDataSource
  .getRepository(User)
  .createQueryBuilder('user')
  .leftJoinAndSelect('user.likes', 'likes')
  .select(['user.id', 'user.firstName', 'user.lastName', 'COUNT(likes.id) AS likes'])
  .groupBy('user.id')
  .getRawMany();

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!