나의 소중한 9시간을 소비하여 익힌 sequelizer에 대해 정리하겠다.
1. column에 대한 수정은 migration을 통해 진행한다.
- npx sequelize migration:generate --name <파일 이름 지정>
- 해당 명령어를 통해, migrate파일 생성한 후에, 수정할 내용 작성
2. 수정한 내용은 바로 model에 적용하여야 한다.
※ migration은 DB에 적용하는 것. model은 코드상에서 작동하는 것으로 구분지어서 이해해야 한다.
association 설정하는 방법
1. 처음 model:generate 를 통해 생기는 파일에 직접 추가하지 않는다.
2. mirgration:generate 를 통해 생기는 파일에 "addColumn"을 사용하여 foreignKey를 추가한다.
3. references를 사용하여 종속관계를 명시한다.
/* dog_poo.js */
module.exports = {
up: async (queryInterface, Sequelize) => {
return queryInterface.addColumn('dog_poos', 'user_dog_id', {
type: Sequelize.STRING,
references: {
model: 'user_dog_infos',
key: 'uid'
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE'
});
},
down: async (queryInterface, Sequelize) => {
return queryInterface.removeColumn('dog_poos', 'user_dog_id')
}
};
3. migration 따로, model 따로 이므로, 이번엔 model에도 foreignKey를 추가해준다.
4. hasMany/belongsTo를 사용하여 종속관계를 명시한다.
/* /models/index.js 중 일부 */
db.user_dog_info.hasMany(db.dog_poo, { sourceKey: 'uid', foreignKey: 'user_dog_id'});
db.dog_poo.belongsTo(db.user_dog_info, { targetKey: 'uid', foreignKey: 'user_dog_id'});
================================================================================
/* /models/dog_poo.js 중 일부 */
dog_poo.associate = (models) => {
dog_poo.belongsTo(models.user_dog_info, {
foreignKey: 'user_dog_id'
})
}
================================================================================
/* /models/user_dog_info.js 중 일부 */
user_dog_info.associate = (models) => {
user_dog_info.hasMany(models.dog_poo, {
foreignKey: 'user_dog_id',
as: 'poos'
})
참고 링크
<sorceKey, targetKey 참고한 공식 문서 링크>
<Sequelize Data Type 참고한 링크>
http://52.78.22.201/tutorials/expressjs/expressjs_orm_one/
<Sequelize association에 대한 전반적인 내용을 참고>
'서버 > nodejs' 카테고리의 다른 글
node.js 에서 middleware Skip 하는 방법 (0) | 2021.05.11 |
---|---|
갑자기 궁금해져서 정리하는 js 변수 선언 방식 (0) | 2021.05.11 |
Sequelize 사용 기록(CRUD/Pagination) - 03 (0) | 2021.04.27 |
Sequelize 사용 기록 - 01 (0) | 2021.04.12 |
내가 헤매서 쓰는 Firebase <-> Nodejs 연동 (0) | 2021.04.08 |