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,
});
},
};
データベーススキーマが更新されて制約が追加されましたが、モデルファイルは更新されませんでした。移行時にモデルファイルを自動的に更新する方法はありますか?
移行時にモデルファイルを自動的に更新する方法はありますか?
残念だけど違う。 sequelize model:create
からの最初の作成を除いて、逐次化モデルと移行の間には同期のレベルはありません。ただし、この質問で提案されているワークフローでは、更新はfrom移行toモデルに伝播する必要があります。通常、移行はモデルへの変更から自動生成されるものであり、必ずしもその逆ではないため、これは少し混乱します。
これらの機能を追跡している未解決の未解決の問題があり、サブスクライブすると役立つ場合があります。
コミュニティの提案/ソリューション:
https://stackoverflow.com/a/28431648/8954866 を参照してください。推奨される回避策は、単純な変更を導入するときにsequelize-cli
を使用してモデルを再作成することです。ただし、アソシエーションなどのCLIから多くの構成を定義することはできないため、この方法には明確な制限があります。
さらに、移行の生成をサポートするnpmパッケージ sequelize-auto-migrations は存在しますが、過度にアクティブなプロジェクトではないようです。
結論:
Sequelizeマイグレーションはモデルファイルを更新する必要がありますか?
Sequelize
/sequelize-cli
はまだこの機能をサポートしていません。
ORMが移行を自動生成するツールを作成する必要がありますか?はい、これは望ましい機能です。そうでない場合、開発者は[〜#〜] dry [などの原則に違反することを余儀なくされます。 〜#〜]と同じロジックを異なるファイルで管理します。