시퀄라이즈 예제는? https://github.com/zerocho/nodejs-book/tree/master/ch7/7.6/learn-sequelize/
$ npm i expres sequelize sequelize-cli mysql2
$ npm i morgan nunjucks
$ npm i -D nodemon
$ npx sequelize init
define 메소드의 세번째 인자는 테이블 옵션
db.Post.belongsToMany(db.Hashtag, { through: 'PostHasgtag' });
db.Hashtag.belongsToMany(db.Post, { through: 'PostHashtag' });
(일반적으로 주체적인 테이블이 다대다 관계를 맺음)
위 sql 쿼리문이 시퀄라이즈로 아래와 같이 바꿀 수 있다.
INSERT INTO nodejs.users (name, age, married, comment) VALUES ('zero', 24, 0, '자기소개1');
const { User } = require('../models');
User.create({
name: 'zero',
age: 24,
married: false,
comment: '자기소개1',
}); // CREATE
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
SELECT * FROM nodejs.users;
User.findAll({}); // READ 전체
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
SELECT name, married FROM nodejs.users;
User.findAll({
attributes: ['name', 'married'],
}); // READ 조건
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
SELECT name, age FROM nodejs.users WHERE married = 1 AND age > 30;
const { Op } = require('sequelize'); // Operator이며 gt, in, ne등 사용할때 선언
const { User } = require('../models');
User.findAll({
attributes: ['name', 'age'],
where: {
married: true,
age: {[Op.gt]: 30 },
},
}); // where 조건으로 married, age조건 둘다 찾기, gt(greater than) = '>',
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
SELECT id, name FROM users WHERE married = 0 OR age > 30;
const { Op } = require('sequelize');
const { User } = require('../models');
User.findAll({
attributes: ['name', 'age'],
where: {
[Op.or]: [{ married: false }, { age: { [Op.gt]: 30} }],
},
});