보통은 Posts 모델에 id 값이 없거나
종속관계가 잘못되었다면 나오는 오류이다
하지만 나의 경우에는 좀 달랐는데..
//좋아요 조회
router.get("/posts/likes", authMiddleware, async (req, res) => {
const { id } = res.locals.user;
try {
// 사용자가 좋아요한 게시글 조회
const likedPosts = await Likes.findAll({
attributes: [
[
Sequelize.literal(
"(SELECT COUNT(*) FROM Likes WHERE Likes.postId = Posts.id)"
),
"likesCount",
],
],
where: { userId: id },
include: [
{
model: Posts,
attributes: ["title", "content"],
},
{
model: Users,
attributes: ["nickname"],
},
],
});
res.status(200).json({ likedPosts });
} catch (err) {
res.status(500).json({ errorMessage: err.message });
}
});
해당 코드는 좋아요 기능을 구현 한 것이다
시퀄라이즈 리터럴을 통해 게시글당 좋아요의 합을 구하는 코드였는데
아무리 해도 Unknown column 'Posts.id' in 'where clause'
오류가 나왔다
모델과 마이그레이션을 싸그리 뒤져도 문제는 없었고 그렇게 머리만 쥐어뜯고있었는데
터미널에 눈이 갔다
Executing (default): SELECT `id`, `nickname`, `password`, `createdAt`, `updatedAt` FROM `Users` AS `Users` WHERE `Users`.`id` = 1;
Executing (default): SELECT `Likes`.`id`, `Likes`.`userId`, `Likes`.`postId`, `Likes`.`createdAt`, `Likes`.`updatedAt`, `Post`.`id` AS `Post.id`, `Post`.`title` AS `Post.title`, `Post`.`content` AS `Post.content`, `Post->User`.`id` AS `Post.User.id`, `Post->User`.`nickname` AS `Post.User.nickname`
FROM `Likes` AS `Likes`
LEFT OUTER JOIN `Posts` AS `Post` ON `Likes`.`postId` = `Post`.`id`
LEFT OUTER JOIN `Users` AS `Post->User` ON `Post`.`userId` = `Post->User`.`id`
WHERE `Likes`.`userId` = 1 GROUP BY `Posts`.`id` ORDER BY COUNT(*) DESC;
여기서 자세히 보니
`Post`.`id` AS `Post.id`
이 문구가 눈에 띄였다
어... Post.id는 뭐지...? 하고 Posts.id
를 Post.id
로 수정해봤다
...
const likedPosts = await Likes.findAll({
attributes: [
[
Sequelize.literal(
"(SELECT COUNT(*) FROM Likes WHERE Likes.postId = Post.id)"
),
"likesCount",
],
],
...
이러니까 정상적으로 작동했다...
뭔 2~3시간 머리만 뜯다가 고치니까 어이가 없었다....
아직 왜 그런지는 정확하게 알 수 없지만
SQL로 변환하면서 Posts 모델의 별칭이 Post로 되어있었던 것 같다
그런데 문제는 다른 코드는 Posts로 쓰여져있다는 것이다..
Post로 바꿨더니 Unknown column 'Posts.id' in 'where clause'
오류가 또 나길래 원상태로 돌려놓았다..
const posts = await Posts.findAll({
attributes: [
"id",
"title",
[
Sequelize.literal(
"(SELECT COUNT(*) FROM Likes WHERE Likes.postId = Posts.id)"
),
"likesCount",
],
],
명확하게 알게되면 따로 글을 써봐야겠다