2016-07-30 11 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())のメリットが得られ、見栄えのよいコードになります。

関連する問題