[TIL] 230725

김주희·2023년 7월 25일
0

내배캠 11주차 TIL

목록 보기
2/5

▶️ M:N 관계 테이블

  • 요새 TIL로 제일 많은 쓰는 주제인듯 싶다 ㅋㅋㅋㅋㅋ(그만큼 헤매는 중이라는 거)
// 모델 관계 설정
// Posts 테이블
this.belongsToMany(models.Users, {
        through: 'Likes',
        foreignKey: 'userId',
        otherKey: 'postId',
});

// Users 테이블
this.belongsToMany(models.Posts, {
        through: 'Likes',
        foreignKey: 'postId',
        otherKey: 'userId',
});
findLikedPosts = async (userId) => {
    const likedPosts = await this.likeRepository.findAllLiked({
      where: { userId },
      attributes: ['postId'],
      include: [
        {
          model: Users,
          attributes: ['nickname'],
        },
        {
          model: Posts,
          attributes: ['title', 'content', 'likeCount'],
        },
      ],
      order: [[Posts, 'likeCount', 'DESC']],
    });

    if (likedPosts.length === 0) {
      return {
        status: 200,
        message: '아직 좋아요한 게시글이 없습니다.',
      };
    }

    return {
      status: 200,
      likedPosts,
    };
};
// 에러 메시지
Posts is not associated to Likes
  • 하나의 테이블이 여러개의 외래키를 갖고 있는 경우 include를 할때 특정 외래키를 선택해야하므로 as를 써야 한다.
// Posts 테이블
this.belongsToMany(models.Users, {
        as: 'postLike',
        through: 'Likes',
        foreignKey: 'userId',
        otherKey: 'postId',
});

// Users 테이블
this.belongsToMany(models.Posts, {
        as: 'userLike',
        through: 'Likes',
        foreignKey: 'postId',
        otherKey: 'userId',
});
  • 따로 서비스 레이어에서 별칭을 정해주지 않아도 API가 문제 없이 실행이 됐는데, 아직 잘 모르겠다. 추가 공부가 필요하다!
profile
꾸준히 하자

0개의 댓글