Les migrations Sequelize sont-elles censées garder vos fichiers de modèle en ligne avec votre base de données?
J'ai utilisé le séquentiel cli pour bootstrap un projet simple et créer un modèle node_modules/.bin/sequelize model:generate --name User --attributes email:string
. J'ai migré cela sans problème.
J'ai ensuite créé le fichier de migration suivant pour ajouter une contrainte notNull à l'attribut de messagerie de l'utilisateur.
migration updateEmail
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,
});
},
};
Le schéma de base de données a été mis à jour pour ajouter la contrainte, mais pas le fichier modèle. Existe-t-il un moyen de mettre à jour automatiquement les fichiers de modèle lorsque vous effectuez des migrations?
Existe-t-il un moyen de mettre à jour automatiquement les fichiers de modèle lorsque vous effectuez des migrations?
Malheureusement non. Il n'y a pas de niveau de synchronisation entre les modèles séquentiels et la migration, sauf pour leur création initiale à partir de sequelize model:create
. Cependant, le flux de travail suggéré dans cette question est que les mises à jour doivent propager depuis migrations vers modèles. Cela m'embrouille légèrement, car les migrations doivent généralement être générées automatiquement à partir des modifications apportées aux modèles, pas nécessairement l'inverse.
Il y a eu des problèmes ouverts en cours de suivi de ces fonctionnalités que vous pouvez trouver utiles pour vous abonner:
Suggestions/Solutions de la communauté:
Reportez-vous à https://stackoverflow.com/a/28431648/8954866 Comme suggéré, une solution de contournement consiste à recréer des modèles à l'aide de sequelize-cli
lors de l'introduction de modifications simples. Cependant, il existe des limites claires à cette méthodologie car de nombreuses configurations ne sont pas possibles à définir à partir du cli telles que les associations.
De plus, il existe un package npm sequelize-auto-migrations qui prend en charge la génération de migrations, mais il ne semble pas être un projet trop actif.
Conclusion:
Les migrations Sequelize doivent-elles mettre à jour les fichiers de modèle?
Sequelize
/sequelize-cli
ne prend pas encore en charge cette fonctionnalité.
Un ORM doit-il créer des outils pour générer automatiquement des migrations? Oui, c'est la fonctionnalité souhaitée car sinon les développeurs sont forcés de violer des principes tels que [~ # ~] sécher [~ # ~] et gérer la même logique dans différents fichiers.