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 }
답변 2
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 필드가 포함된 결과가 저장됩니다.
1const users = await myDataSource
2 .getRepository(User)
3 .createQueryBuilder('user')
4 .leftJoinAndSelect('user.likes', 'likes')
5 .select(['user.id', 'user.firstName', 'user.lastName', 'COUNT(likes.id) AS likes'])
6 .groupBy('user.id')
7 .getRawMany();
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직 개발자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!