2016-07-30 78 views
2

我已經完成了。在更改狀態列屬性後,我遇到更新行的問題。Sequelize遷移:更新列屬性後更新模型

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())並且具有更好看的代碼。