web-dev-qa-db-ja.com

Sequelizeマイグレーションはモデルファイルを更新する必要がありますか?

Sequelizeの移行では、モデルファイルをデータベースと一致させる必要がありますか?

bootstrap単純なプロジェクトにsequelize cliを使用してモデルを作成しましたnode_modules/.bin/sequelize model:generate --name User --attributes email:string。問題なく移行しました。

次に、次の移行ファイルを作成して、ユーザーの電子メール属性にnotNull制約を追加しました。

pdateEmailの移行

const models = require("../models")

module.exports = {
  up: (queryInterface, Sequelize) => {
      return queryInterface.changeColumn(models.User.tableName, 'email',{
        type: Sequelize.STRING,
        allowNull: false,
      });
    },

  down: (queryInterface, Sequelize) => {
      return queryInterface.changeColumn(models.User.tableName, 'email',{
        type: Sequelize.STRING,
      });
    },
};

データベーススキーマが更新されて制約が追加されましたが、モデルファイルは更新されませんでした。移行時にモデルファイルを自動的に更新する方法はありますか?

11
Jeffrey Kandel

移行時にモデルファイルを自動的に更新する方法はありますか?

残念だけど違う。 sequelize model:createからの最初の作成を除いて、逐次化モデルと移行の間には同期のレベルはありません。ただし、この質問で提案されているワークフローでは、更新はfrom移行toモデルに伝播する必要があります。通常、移行はモデルへの変更から自動生成されるものであり、必ずしもその逆ではないため、これは少し混乱します。

これらの機能を追跡している未解決の未解決の問題があり、サブスクライブすると役立つ場合があります。

コミュニティの提案/ソリューション:

https://stackoverflow.com/a/28431648/8954866 を参照してください。推奨される回避策は、単純な変更を導入するときにsequelize-cliを使用してモデルを再作成することです。ただし、アソシエーションなどのCLIから多くの構成を定義することはできないため、この方法には明確な制限があります。

さらに、移行の生成をサポートするnpmパッケージ sequelize-auto-migrations は存在しますが、過度にアクティブなプロジェクトではないようです。

結論:

Sequelizeマイグレーションはモデルファイルを更新する必要がありますか?

Sequelize/sequelize-cliはまだこの機能をサポートしていません。

ORMが移行を自動生成するツールを作成する必要がありますか?はい、これは望ましい機能です。そうでない場合、開発者は[〜#〜] dry [などの原則に違反することを余儀なくされます。 〜#〜]と同じロジックを異なるファイルで管理します。

16
vapurrmaid