▶️ M:N 관계 테이블
- 요새 TIL로 제일 많은 쓰는 주제인듯 싶다 ㅋㅋㅋㅋㅋ(그만큼 헤매는 중이라는 거)
this.belongsToMany(models.Users, {
through: 'Likes',
foreignKey: 'userId',
otherKey: 'postId',
});
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를 써야 한다.
this.belongsToMany(models.Users, {
as: 'postLike',
through: 'Likes',
foreignKey: 'userId',
otherKey: 'postId',
});
this.belongsToMany(models.Posts, {
as: 'userLike',
through: 'Likes',
foreignKey: 'postId',
otherKey: 'userId',
});
- 따로 서비스 레이어에서 별칭을 정해주지 않아도 API가 문제 없이 실행이 됐는데, 아직 잘 모르겠다. 추가 공부가 필요하다!