시퀄라이즈

chu·2021년 3월 30일
0

지난 시간에는 노드에서 MySQl DB 생성부터 시퀄라이즈 쿼리를 정리를 했다. 아직 많이 부족한 부분이 있지만 개념 정리와 실습을 통해서 더 배워가려고 한다.


시퀄라이즈 쿼리

MySQL에서는 SQL문으로 코드로 작성하여 DB를 생성하고, 구축한다.
SQL문을 배워서 진행하면 좋지만, 자바스크립트를 가깝게 지냈다면,
시퀄라이즈 쿼리로 SQL문을 대체할 수 있다. 어디까지나 한계가 있다.

수정 및 삭제

이전 글에는 데이터를 생성하고, 조회를 하는 방법에 대해서 정리를 했다. 아래부터는 수정하고, 삭제하는 방법에 대해서 정리를 하겠다.

수정

수정을 하려면 어떠한 조건으로 데이터를 찾아야 한다.
전 시간에 배웠던 where를 사용하여 진행해보자.

// User 모델 불러오기
const User = require('../models/user');

User.update({
  merried: 'true', // 업데이트 내용 false -> true
}, {
  where: { id: 2 }, // id가 '2'인 user
});

수정 SQL문

// nodejs - DB이름
UPDATE nodejs.users SET merried = 'true' WHERE id = 2;

삭제

위 내용처럼 삭제 또한 조건으로 데이터를 찾고, 삭제하자.

// User 모델 불러오기
const User = require('../models/user');

User.destory({
  where: { id: 2 }, // id가 '2'인 user 삭제
});

삭제 SQL문

// nodejs - DB이름
UPDATE FROM nodejs.users WHERE id = 2;

시퀄라이즈 관계 쿼리 #1

include라는 메서드를 사용하여, User가 아닌 다른 테이블의 데이터를 가져올 경우 관계를 지정하여 엮을 수 있다.

const User = require('../models/users');
const Comment = require('../models/Comment');

const user = await User.findOne({
  include: [{
    model: Comment, // 모델명
  }],
});

console.log(user.Comments); // 사용자의 댓글들(복수형)

User안에는 Comment가 없기 때문에, include는 User를 거쳐서 Comment 테이블에서 Comments를 가져와야하는데, 이 때 include를 사용해서 관계를 엮어 가져오는 것이다.

이때 include에는 무조건 모델명을 기재 해야한다.

물론 위 방법말고 get+모델명()을 써서 데이터를 가져오는 방법도 있다.

시퀄라이즈 관계 쿼리 #2

get + 모델명으로 관계 있는 데이터 로딩

const User = require('../models/users');
const Comment = require('../models/Comment');

// 유저 한명 가져오기. 이 때 맨 위의 유저만 가져온다.
const user = await User.findOne({});
// 유저와 관계 있는 댓글 가져오기.
const comments = await user.getComments();
console.log(comments) // 사용자 댓글

as로 모델명 변경 후 데이터 로딩

// ../modles/user
// 관계 설정 시
static associate(db) {
  db.User.hasMany(db.Comment, { as: 'Answers' });
}

// 쿼리할 경우
const User = require('../models/users');

const user = await User.findOne({});
// as명으로 가져오기
const comments = await user.getAnswer();
console.log(comments) // 사용자댓글

이렇게 해서 시퀄라이즈로 데이터 수정, 삭제 및 모델 관계를 이용한 데이터 가져오는 등 방법에 대해서 정리를 했다.

단순한 이론이 아닌 실제 실습을 통해서 얻는 지식이 더 크다고 생각이 든다. 실습을 통해서 얻은 경험을 추가로 작성을 해보도록 하겠다.

profile
한 걸음 한걸음 / 현재는 알고리즘 공부 중!

0개의 댓글