2016-07-30 4 views
2

이미 끝까지 다룰 것입니다. 상태 열 속성을 변경 한 후 행을 업데이트하는 데 문제가 있습니다.Sequelize Migration : 열 속성을 업데이트 한 후 모델 업데이트

up: function(queryInterface, Sequelize) { 
    return queryInterface.changeColumn('projects', 'status', { 
     type: Sequelize.ENUM('processing', 'unassigned', 'ongoing', 'completed'), 
     allowNull: false, 
     defaultValue: 'unassigned' 
    }).then(function() { 
     return Project.update({ 
      status: 'unassigned' 
     }, { 
      where: { 
       status: 'processing' 
      } 
     }); 
    }); 
} 

Project.update()는 어떤 경우에도 작동하지 않는 것처럼 보이지만 열의 특성을 변경하면 작동합니다.

아무 생각 없나요? 나는 어떻게 든 속편에 초보자이고 어떤 아이디어라도 큰 도움이 될 것입니다. 감사.

답변

2

마이그레이션을 수행하는 방법에 따라 (sequelize-cli 또는 프로그래밍 방식으로 umzug를 통해). ORM을 통해 표를 노출하는 다른 방법이 있습니다.

귀하의 경우 함수에 인수로 queryInterface이 전달되었습니다. 따라서 첨부 된 sequelize 속성을 통해 "원시 쿼리"를 수행 할 수 있습니다.

up: function(queryInterface, Sequelize) { 
    return queryInterface.changeColumn('projects', 'status', { 
     type: Sequelize.ENUM('processing', 'unassigned', 'ongoing', 'completed'), 
     allowNull: false, 
     defaultValue: 'unassigned' 
    }).then(function() { 
     return queryInterface.sequelize 
          .query("UPDATE projects SET status='unassigned' WHERE status='processing'"); 
    }); 
} 

이렇게하면 데이터베이스에 원시 쿼리가 생성됩니다.

마이그레이션 중에 ORM을 사용하는 고급 방법에 대한 자세한 내용은 this gist을 참조하십시오.

나는 umzug을 프로그래밍 방식으로 사용하는 팬이다.이 마이 그 레이션을 실행하고 데이터베이스의 초기화 된 모델을 제공한다. 올바르게 구성하면 노출 된 모델 (예 : sequelize.model('project').update())의 이점을 얻고 더 우수한 코드를 얻을 수 있습니다.

관련 문제