sequelize를 사용할때는 subquery 구조를 잘짜는게 제일 중요한거같다. 정말 제대로된 쿼리문으로 원하는 데이터들을 잘 조합해서 완벽하게 받아오고 싶은데 아직 실력이 부족한것같다. 연습해야지
아래는 sequelize 사용하면서 기억에 남았던 부분들이다.
먼저 코드는 아래와 같다.
const findedTrack = await Track.findOne({
attributes: ["title", "trackId", "category", "trackThumbnailUrl", "trackUrl", "userId"],
where: { trackId: findedTrackIds },
include: [
{ model: TrackTag, attributes: ["tag"] },
{ model: User, attributes: ["nickname"] },
{
model: Like,
attributes: [[sequelize.fn("COUNT", sequelize.col("Likes.trackId")), "likeCnt"]],
},
{
model: Comment,
attributes: [[sequelize.fn("COUNT", sequelize.col("Comments.trackId")), "commentCnt"]],
},
],
group: ["Track.trackId", "TrackTags.trackTagId", "Likes.likeId", "Comments.commentId"],
});
가장 먼저봤던 것은 model의 이름은 단수형으로 사용하고, table의 이름은 복수형으로 사용한다는 것이다.
아래 코드를 보면 model의 이름을 입력하는 부분에는 단수형인 model의 이름이 그대로 들어가고, table의 이름이 들어가는 부분은 복수형으로 사용된다.
subquery를 사용해서 다른 table들에서 원하는 데이터들을 불러왔다. 이때 include: []를 사용해서 불러온다. 직접적으로 관계가 없으면 불러올 수 없지만 include: [ include: [] ] 이런식으로 연결지어서 타고타고 갈 수 있다.