CRUD
1. CREATE
User.create({
name: '까까',
age: 7,
gender: 'male'
});
- models에서 불러온 모델을 바탕으로
create
메소드 사용
- Sequelize : id, createdAt, updatedAt 필드는 자동으로 생성
2. READ
1) findAll
User.findAll({
attributes: ['name', 'age']
})
User.findAll({
attributes: ['name', 'age'],
where: {
gender: 'male'
}
})
User.findAll()
- 모델은 단수형으로 생성
*테이블은 복수형으로 자동 생성
2) findOne
User.findOne({ where: { name: '까까' } })
3) findByPk
User.findByPk(1)
4) findOrCreate
const [user, created] = User.findOrCreate({
where: { name: '까까' },
defaults: {
gender: 'male'
}
})
- 만약 존재한다면 해당하는 인스턴스를 반환하고, 그렇지 않으면 새로 생성
- created : 새 객체가 생성되었을 경우 true, 그렇지 않을 경우 false
- where에 함께 전달되는 defaults 옵션은 검색 결과가 존재하지 않을 경우 새로 생성되는 요소가 갖는 기본값
3. UPDATE
User.UPDATE({age: 8}, {
where: {
name: '까까'
}
})
const result = User.findByPk(1)
result.UPDATE({
age: result.age + 1
})
const result = User.findByPk(1)
result.age++
result.save()
UPDATE
메소드를 사용하지 않고 변경한 경우 save()
메소드로 저장해 주어야 함
4. DELETE
User.destroy({
where: {
name: '까까'
}
})
관계 정의
1. 관계 설정 방법
1) 1:1
User.hasOne(Profile)
Profile.belongsTo(User)
2) 1:N
Team.hasMany(Player)
Player.belongsTo(Team)
3) N:M
Project.belongsToMany(User, {through: 'UserProject'});
User.belongsToMany(Project, {through: 'UserProject'});
2. 관계 설정 예시 (1:N)
예시 : users 테이블과 urls 테이블을 1:N 관계로 설정하기
- urls 테이블에 userId 필드 생성
- userId는 users 테이블의 id를 Fk로 가져옴
1) column을 추가하는 migration 생성
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn("urls", "userId", Sequelize.INTEGER);
await queryInterface.addConstraint("urls", {
fields: ["userId"],
type: "foreign key",
name: "USERID_IS_FOREIGN_KEY",
references: {
table: "users",
field: "id",
},
onDelete: "cascade",
onUpdate: "cascade",
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeConstraint("urls", "USERID_IS_FOREIGN_KEY");
await queryInterface.removeColumn("urls", "userId");
},
};
2) 1:N의 관계 지정
(1) 각각의 model에 지정
class url extends Model {
static associate(models) {
models.url.belongsTo(models.user);
}
}
class user extends Model {
static associate(models) {
models.user.hasMany(models.url);
}
}
(2) index.js에서 한번에 지정
url.belongsTo(user);
user.hasMany(url);
References
1. 공식문서
2. 관계 정의하기