포시코딩

[Sequelize] SQL 쿼리(Raw Query) 그대로 사용하기 - Sequelize.query 본문

Node.js

[Sequelize] SQL 쿼리(Raw Query) 그대로 사용하기 - Sequelize.query

포시 2022. 12. 23. 00:53
728x90

개요

반복되는 JOIN과 GROUP BY, 그리고 Sub Query까지 사용되고 있는 쿼리문을 만들었을 때

Sequelize를 통해 해당 데이터를 뽑아내야 한다면 막막할 것이다.

 

내가 그랬고, 그정도까지 Sequelize에 숙달되지도 않았고 매달릴 시간도 없어서

그냥 직접 MySQL과 연동하여 쿼리문 그대로 날리는 모듈을 만들어 사용할 생각을 하고 있었는데

 

혹시나 하는 마음에 검색해봤더니 Sequelize를 통해서도 쿼리문을 그대로 사용할 수 있었다.

 

사용 방법

const { QueryTypes } = require("sequelize"); 
const { sequelize } = require("../sequelize/models/index"); 

static findAll(userId) {
    return new Promise(async (resolve, reject) => {
      const query = `SELECT * FROM Likes WHERE userId = ?`;

      await sequelize.query(query, { 
        type: QueryTypes.SELECT,
        replacements: [userId], 
      })
      // replacements를 통해 ?에 값을 넣을 수 있다. 안쓰고 걍 바로 쿼리문에 박아도 자유임
      
      .then((result) => {
        resolve(result);   
      })  // Promise 안에서 제어되는 값이기 때문에 then, catch를 통해 resolve, reject 처리해줬음
      .catch((err) => {
        reject(err);
      });
    });
  };
}

쿼리문은 예시용으로 짧게 작성해놨고

사용하는 사람도 저런식으로 먼저 테스트할 짧은 쿼리문부터 해보며 적용하기를 추천한다.

 

 

 

 

도움받은 곳

https://choice91.tistory.com/165

 

Sequelize에서 SQL 쿼리 그대로 사용하기

Sequelize에서 find, create, update, delete로 CRUD 작업을 할 수 있지만 Raw Query로도 할 수 있다. const User = require("../models/user"); const result = await User.findAll({}); 위에 코드는 find를 사용했고 아래 코드는 SQL문으

choice91.tistory.com

728x90