2016-07-30 74 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())并且具有更好看的代码。