서버/nodejs

너무 헤매서 기록하는 sequelizer 사용 일지 02

나의 소중한 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.org/master/manual/assocs.html#for--code-hasone--code--and--code-hasmany--code--relationships

 

<Sequelize Data Type 참고한 링크>

http://52.78.22.201/tutorials/expressjs/expressjs_orm_one/

 

<Sequelize association에 대한 전반적인 내용을 참고>

medium.com/graphql-seoul/%EB%B2%88%EC%97%AD-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98%EA%B3%BC-sequelize-cli-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC-3926c0a9eae6