지난 시간에는 노드에서 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
});
// 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 삭제
});
// nodejs - DB이름
UPDATE FROM nodejs.users WHERE id = 2;
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+모델명()
을 써서 데이터를 가져오는 방법도 있다.
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) // 사용자댓글
이렇게 해서 시퀄라이즈로 데이터 수정, 삭제 및 모델 관계를 이용한 데이터 가져오는 등 방법에 대해서 정리를 했다.
단순한 이론이 아닌 실제 실습을 통해서 얻는 지식이 더 크다고 생각이 든다. 실습을 통해서 얻은 경험을 추가로 작성을 해보도록 하겠다.