Sequelize query
Sequelize query
sequelize에서 CRUD 작업은 sql문을 자바스크립트를 통해 만듭니다. sql 쿼리는 프로미스를 반환하므로 then
이나 asnyc/await
문법으로 다룰 수 있습니다.
1. 기본사항
(1) 레코드(ROW) 생성
- SQL
INSERT INTO users (name, age) VALUES('choongman', 30);
- sequelize
Users.create({
name: 'choongman',
age: 30
})
(2) 레코드(ROW) 조회
A. 모든 데이터
- SQL
SELECT * FROM users;
- sequelize
Users.findALL({});
B. 하나의 데이터
- SQL
SELECT * FROM users LIMIT 1;
- sequelize
Users.findOne({});
C. 특정 필드(Column)
- SQL
SELECT name, married FROM users;
- Sequelize
User.findAll({
attributes: ['name', 'married']
})
D. 기본적 조건부 조회
- SQL
SELECT name, age FROM users WHERE married = 1 AND age > 20;
- Sequelize
Users.findALL({
attiributes: ['name', 'age'],
where: {
married: 1,
age: {[Op.gt]: 20}
}
})
- SQL
SELECT id, name FROM users WHERE married = 0 OR age < 20;
- Sequelize
User.findALL({
attributes: ['name', 'age'],
where: {
[Op.or]: [{married: 0}, {age: {[Op.lt]}: 40}]
}
})
E. 정렬하기(Order)
- SQL
SELECT id, name FROM users ORDER BY age DESC;
- Sequelize
User.findALL({
attributes: ['name', 'age'],
order: [['age', 'DESC']]
})
F. 조회할 레코드 개수 설정(limit, offset)
- SQL
SELECT id, name FROM users ORDER BY age DESC LIMIT 1;
- Sequelize
User.findALL({
attributes: ['name', 'age'],
order: [['age', 'DESC']],
limit: 1
})
(3) 레코드(ROW) 수정 [Update]
- SQL
SELECT users SET comment ='수정할 내용' WHERE id = 3;
- Sequelize
User.update(
{comment: '수정할 내용'},
{where: { id: 3}}
})
(4) 레코드(ROW) 삭제 [delete]
- SQL
DELETE FROM users WHERE id =4;
- Sequelize
User.destroy({
where: {id: 4}
}}
2. 관계 쿼리
먼저 연결관계를 정의하는 메서드 기준으로 , 함수를 호출하는 모델 객체가 source, 메서드 안에 인자로 전달되는 모델 객체가 target 입니다.
(1) 1: 1 관계
하나의 외래 키로 연결된 두 모델 간의 연결 관계
A. BelongsTo
외래키가 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
as를 사용하면 정의된 이름이 target 모델의 이름으로 사용됩니다.
const User = this.sequelize.define('user', {});
const UserRole = this.sequelize.define('userRole', {});
User.belongsTo(UserRole, {as : 'role'}) // roleId가 추가됩니다.
foreignKey
foreignKey 옵션을 주면, as 옵션을 모두 무시하고 foreignKey 옵션의 값에 따라 왜리 키 컬럼을 짓습니다.
const User = this.sequelize.define('user', {})
const Company = this.sequelize.define('compnay', {});
User.belongsTo(Company, {foreignKey: 'fk_company'}) // User모델에 fk_company 특성을 추가됩니다.
Targetkey
target 모델에 있는 칼럼으로, source 모델에 있는 외래 키 컬럼은 targetKey컬럼을 가리키게 됩니다. belongsTo 관계에서 targetKey는 기본값으로 target 모델의 주요 키를 가리킵니다.
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컬럼
B. HasOne
일대일 관계를 위한 외래 키가 target 모델에 존재하는 관계
const User = sequelize.define('user', {})
const Profile = sequelize.define('profile', {})
User.hasOne(Profile)
Profile.belongsTo(User)
User 모델에 profileId를 자동으로 추가합니다.
(2) 1: N 관계
일대 다 관계는 단일 source를 복수의 target 모델에 연결합니다. 이때 target 모델은 반드시 단 하나의 source 모델에만 연결됩니다.
A. hasMany
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'})
(3) N: M 관계
다대다 관계는 다수의 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
Author And Source
이 문제에 관하여(Sequelize query), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tastestar/Sequelize-query저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)