web-dev-qa-db-fra.com

Les migrations Sequelize doivent-elles mettre à jour les fichiers de modèle?

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?

11
Jeffrey Kandel

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.

16
vapurrmaid