해결된 질문
작성
·
548
답변 6
0
콘솔 쿼리 보면서 해결했습니다 감사합니다!!
order: [[sequelize.literal("(COUNT(`likers->like`.`PostId`))"), "DESC"]],
이렇게 하니까 되네요.
0
저기 객체 안에 Likers는 시퀄라이즈가 만들어주는 객체이고요. 실제 DB와는 다릅니다. COUNT(`Likers`.`id`) 이런 식으로 DB에 적혀있는 테이블명과 컬럼명을 구분해야 할 것 같네요(``가 테이블과 컬럼을 구분해줍니다) sequelize.literal을 쓰기 시작할 때부터는 SQL문법을 어느정도 그대로 쓰셔야 합니다. 그리고 시퀄라이즈 쿼리를 할 때 콘솔에 나오는 쿼리를 분석해보는 것도 좋습니다. 그걸 기반으로 바꿔야하거든요.
0
order: [[sequelize.literal('COUNT(Likers.id)'), 'DESC']],
SequelizeDatabaseError: Unknown column 'Likers.id' in 'order clause'
at Query.formatError (/Users/donghyun/Documents/react-sns/back/node_modules/sequelize/lib/dialects/mysql/query.js:239:16)
at Query.run (/Users/donghyun/Documents/react-sns/back/node_modules/sequelize/lib/dialects/mysql/query.js:54:18)
at processTicksAndRejections (internal/process/task_queues.js:93:5)
at async /Users/donghyun/Documents/react-sns/back/node_modules/sequelize/lib/sequelize.js:619:16
at async MySQLQueryInterface.select (/Users/donghyun/Documents/react-sns/back/node_modules/sequelize/lib/dialects/abstract/query-interface.js:938:12)
at async Function.findAll (/Users/donghyun/Documents/react-sns/back/node_modules/sequelize/lib/model.js:1753:21)
at async /Users/donghyun/Documents/react-sns/back/routes/posts.js:45:19
order 문을 사용했더니 위 에러가 발생합니다. Likers.id가 왜 알 수 없는 컬럼이라고 나올까요..
Post 객체의 구조는 다음과 같습니다.
Post 안에 Likers가 분명 있는데요..ㅠㅠ
0
0
감사합니다!
근데 ORDER BY 이전까지 시퀄라이즈로 표현하는게 되게 힘드네요ㅠㅠㅠ
sequelize.literal를 쓰지 않고
단순히 Post 객체 내부에 있는 Likers의 length로 정렬할 수 있는 방법은 없을까용..?
const posts = await Post.findAll({
where,
limit: 10,
order: [[sequelize.literal('COUNT(Likers.id)'), 'DESC']],
include: [
{
model: User, // 좋아요 누른 사람
as: 'Likers',
attributes: ['id'],
},
],
});
저런 의미의 order문이 들어가면 될 것 같은데 오류가 나네요..........
0