시퀄라이즈를 통해 raw쿼리와 orm 쿼리를 동시에 사용할 일이 생겼다.
사유는 디비 컬럼간에 비교를 조건으로 하는 쿼리를 작성하고 싶었기 때문이다.
예시와 함께 설명해 보겠다.
예시로 사용할 테이블 이름을 간단하게 product라고 하자.
그리고 아래와 같은 조건을 가진다고 생각해보자.
1. 나는 원가와, 세일가가 다르고
2. isTest 가 Y이다
3. isDel 이 N이다.
4. 코드의 진행 과정에서 생성되는 categoryId라는 값과 categoryId가 일치하는 데이터를 추출하고 싶다.
이런경우를 raw 쿼리로 표현하면 다음과 같을 것이다.
`select * from product where price != salePrice and isTest ="Y" and isDel="N" and categoryId = ${categoryId} `
이를 sequlize로 표현하기 위해 제법 고생했다 .
다음과 같이 작성하여 해결했다.
방법은 sequelize.literal을 사용하여 raw쿼리를 삽입해 주는 것이다.
const { Op } = require('sequelize');
const product = require('../../model/product');
await product.findAll({
where: {
[Op.and]: [
{ categoryId : categoryId },
{ isTest: 'Y' },
{ isDel: 'N' },
sequelize.literal('product.price != product.salePrice')
],
},
});
콘솔을 통해 작동된 쿼리를 보면 다음과 같이 나온다.
FROM
`product` AS `product`
WHERE
(`product`.`categoryId` = 23
AND `product`.`isTest` = 'Y'
AND `product`.`isDel` = 'N'
AND product.
price!= product.salePrice)
'NodeJS' 카테고리의 다른 글
| 카카오 로그인 구현 KOE101에러 해결( 앱키 문제 아니였음 ) (1) | 2023.04.22 |
|---|---|
| [Nest js] simple-oauth2 를 이용한 ravelry 소셜 로그인 구현 (1) | 2023.04.17 |
| sequelize CASE WHEN 으로 정렬하기 (order CASE WHEN) (0) | 2023.01.03 |
| passport local CORS (프론트, 백 분리 시 sid 쿠키 저장 안되는 현상 해결) (2) | 2022.10.14 |
| FormData를 이용하여 데이터 전송이 안되는 현상 (0) | 2022.08.09 |