sequelize에서 CRUD 작업은 sql문을 자바스크립트를 통해 만듭니다. sql 쿼리는 프로미스를 반환하므로 then
이나 asnyc/await
문법으로 다룰 수 있습니다.
INSERT INTO users (name, age) VALUES('choongman', 30);
Users.create({
name: 'choongman',
age: 30
})
SELECT * FROM users;
Users.findALL({});
SELECT * FROM users LIMIT 1;
Users.findOne({});
SELECT name, married FROM users;
User.findAll({
attributes: ['name', 'married']
})
SELECT name, age FROM users WHERE married = 1 AND age > 20;
Users.findALL({
attiributes: ['name', 'age'],
where: {
married: 1,
age: {[Op.gt]: 20}
}
})
SELECT id, name FROM users WHERE married = 0 OR age < 20;
User.findALL({
attributes: ['name', 'age'],
where: {
[Op.or]: [{married: 0}, {age: {[Op.lt]}: 40}]
}
})
SELECT id, name FROM users ORDER BY age DESC;
User.findALL({
attributes: ['name', 'age'],
order: [['age', 'DESC']]
})
SELECT id, name FROM users ORDER BY age DESC LIMIT 1;
User.findALL({
attributes: ['name', 'age'],
order: [['age', 'DESC']],
limit: 1
})
SELECT users SET comment ='수정할 내용' WHERE id = 3;
User.update(
{comment: '수정할 내용'},
{where: { id: 3}}
})
DELETE FROM users WHERE id =4;
User.destroy({
where: {id: 4}
}}
먼저 연결관계를 정의하는 메서드 기준으로 , 함수를 호출하는 모델 객체가 source, 메서드 안에 인자로 전달되는 모델 객체가 target 입니다.
하나의 외래 키로 연결된 두 모델 간의 연결 관계
외래키가 source 모델에 존재하는 연결관계 입니다.
const Player = this.sequelize.define('player', {});
const Team = this. sequelize.define('team', {});
Player.belongsTo(Team);
Player 모델에는 teamId 특성이 추가되며, 여기에 Team의 주요키가 들어있습니다.
Foreign Keys
belongsTo 관계에 외래키는 [target 모델의 이름 + target 모델 주요 키이름]으로 자동생성되는 것이 기본 값입니다.
as
const User = this.sequelize.define('user', {});
const UserRole = this.sequelize.define('userRole', {});
User.belongsTo(UserRole, {as : 'role'}) // roleId가 추가됩니다.
foreignKey
const User = this.sequelize.define('user', {})
const Company = this.sequelize.define('compnay', {});
User.belongsTo(Company, {foreignKey: 'fk_company'}) // User모델에 fk_company 특성을 추가됩니다.
Targetkey
const User = sequelize.define('user', {})
const Compnay = sequelize.define('company', { name: Sequelize.STRING });
User.belongsTo(Company, {foreignKey : 'fk_companyname', targetKey: 'name'})
// User 모델에 fk_companyname을 추가합니다.
// fk_companyname이 가리키는 targeet 모델의 컬럼은 name컬럼
일대일 관계를 위한 외래 키가 target 모델에 존재하는 관계
const User = sequelize.define('user', {})
const Profile = sequelize.define('profile', {})
User.hasOne(Profile)
Profile.belongsTo(User)
User 모델에 profileId를 자동으로 추가합니다.
일대 다 관계는 단일 source를 복수의 target 모델에 연결합니다. 이때 target 모델은 반드시 단 하나의 source 모델에만 연결됩니다.
const User = sequelize.define('user', {})
const Project = sequelize.define('project', {})
Project.hasMany(User, {as: 'Workers'})
const City = sequelize.define('city', {
countryCode: Sequelize.STRING
})
const Country = sequelize.define('country', {isoCode: Sequelize.STRING });
Country.hasMany(City, {foreignKey: 'countryCode', sourceKey: 'isoCode'})
City.belonsTo(Country, {foreingKey: 'countryCode', targetKey: 'isoCode'})
다대다 관계는 다수의 source를 다수의 target과 연결할 때에 사용, 다수의 target은 다수의 source와 연결할 수 있습니다.
Project.belongsToMany(User, {through: 'UserProject'});
User.belongsToMany(Project, {through: 'UserProject'})
여기서 thrgouh는 필수 옵션입니다.
Project
객체에는 getUsers, setUsers, addUser, addUser가 추가됩니다.
User
객체에는 getProjects, setProjects, addProject, addProjects가 추가됩니다.
<https://skyseven73.tistory.com/12
https://spicycookie.me/Nodejs/sequelizecrud/
https://velog.io/@cadenzah/sequelize-document-4
https://gngsn.tistory.com/71