Ändern einer vorhandenen Sequelize-Migration

Wenn Sie gerade mit der Verwendung von sequelize und sequelize CLI in der Entwicklung begonnen haben, hatten Sie definitiv häufiges Hinzufügen und Löschen von Spalten. Und ja, all diese Male haben Sie die Migrationsdatei direkt geändert, alle Migrationen verworfen und Migrationen erneut ausgeführt, damit Ihre Änderungen widergespiegelt werden.

Aber ich bin froh, dass du hier bist, weil du merkst, dass das falsch ist, oder wenn du es gerade zum ersten Mal herausfindest, freue ich mich für dich. In der Produktion können Sie nicht einfach alle Datenbanktabellen löschen, weil Sie eine Migration aktualisiert haben. Das wird ein großes Durcheinander, obwohl es Backups gibt.

Wie auch immer, in diesem Artikel zeige ich Ihnen, wie Sie die Spalte aktualisieren, eine neue Spalte oder Spalten hinzufügen und eine vorhandene Spalte aus/in einer vorhandenen Migration löschen.

Hier ist etwas, das Sie wissen und verstehen sollten, es wird Ihnen helfen, wenn Sie Probleme mit Sequelize-Modifikationen haben. Aber wenn Sie nur eine schnelle Lösung wollen, können Sie dies überspringen und zum fleischigeren Teil übergehen.

QueryInterface: Eine Migration ist einfach eine Reihe von Anweisungen, die die queryInterface-Methode verwenden, es ist ein Mittelsmann zwischen Ihnen und Ihrer Datenbank, also gibt es Sie und es gibt die Datenbank, Sie erstellen und passen Ihre Tabelle selbst an, jetzt möchten Sie diese Tabelle in die laden database, weisen Sie queryInterface an, die von Ihnen erstellte Tabelle mit dem Befehl createTable in die Datenbank zu übernehmen.

Jetzt wollen wir keine neue Tabelle erstellen, sondern die vorhandene Tabelle ändern. queryInterface ist immer noch Ihr Mann, aber es versteht nicht alle Befehle, es hat seinen eigenen Befehl, den es versteht, also müssen Sie seinen eigenen Befehl verwenden, um mit ihm zu kommunizieren, Sie können ihm sagen:

Spalte hinzufügen wenn Sie eine neue Spalte oder Spalten hinzufügen möchten. Dies ist eine Folgemethode, die von queryInterface verwendet wird, um einer Tabelle eine neue Spalte hinzuzufügen. Es nimmt die Spalte und den Namen der Tabelle von Ihnen, geht in die Datenbank, sucht nach dem Tabellennamen und fügt ihn hinzu.

changeSpalte Wenn Sie die Spalte ändern möchten, wahrscheinlich den Datentyp einer Spalte. Dies ist auch eine Folgemethode, die queryInterface verwendet, um eine Spalte zu ändern. Es nimmt die neuen Anpassungen, die Sie ihm gegeben haben, den Namen der Tabelle und geht in die Datenbank, sucht nach der Tabelle und nimmt die Anpassung vor.

Spalte entfernen wenn Sie eine Spalte entfernen möchten, wahrscheinlich wenn Sie sie unbrauchbar finden. Dies ist eine Folgemethode, die queryInterface verwendet, um eine Spalte zu löschen. Es sucht nach der Tabelle und der Spalte und führt die Aktion für Sie aus. Sie müssen noch den Namen der Tabelle und dann den Namen der Spalte angeben.

Tabelle erstellen wenn Sie eine komplett neue Tabelle erstellen. Ich glaube, das ist Ihnen vielleicht schon bekannt. Ohne diese können Sie wohl keine Spalte hinzufügen, ändern oder entfernen.

Im Wesentlichen müssen Sie queryInterface etwas hinzufügen, das Sie hinzufügen können. So können Sie es tun. Hier kommen wir zur Sache, wir werden ein Projekt zum Testen verwenden.

Wenn Sie also kein fertiges Projekt haben und dies nur lernen möchten, habe ich einen Starter auf Quicksi erstellt, den Sie einfach verwenden können. Alles ist für Sie eingerichtet. Überprüfen Sie es hier:

Wenn Sie den Starter verwenden, folgen Sie bitte der Anleitung, um den Starter zu erhalten, erstellen Sie dann eine .env-Datei und fügen Sie Ihre Datenbank-URL hinzu. Erstellen Sie dann eine neue Folgemigration, an der Sie Änderungen vornehmen können.

(ICH). Aktualisieren einer Spalte
Lassen Sie uns nun eine Spalte in der Migration aktualisieren, die Sie haben oder vom Starter erstellt haben.

Nehmen wir also an, wir haben eine Benutzertabelle mit den Spalten Vorname, Nachname und April. Und wir wollen den April-Datentyp von INTEGER auf FLOAT aktualisieren, mit einem allowNull-Schlüssel und einer Eigenschaft von false.

Benutzertabelle vorher:

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('users', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      firstName: {
        type: Sequelize.STRING
      },
      april: {
        type: Sequelize.INTEGER
      },
      lastName: {
        type: Sequelize.STRING
      },
      email: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('users');
  }
};

queryInterface wartet darauf, dass Sie ihm den Befehl geben, einschließlich dessen, was aktualisiert werden soll und in welcher Tabelle es ausgeführt werden soll.

Um queryInterface etwas zu geben, müssen Sie eine neue Migration erstellen:

Führen Sie diesen Befehl aus:

sequelize migration:create --name name_of_your_migration

Eine neue Migration wurde für Sie generiert. Bearbeiten Sie als Nächstes die neu erstellte Migration.

module.exports = {
  up: (queryInterface, Sequelize) => {
    return Promise.all([
      queryInterface.changeColumn('users', 'april', {
        type: Sequelize.FLOAT,
        allowNull: false
      }),
    ]);
  },

  down: (queryInterface) => {
    return Promise.all([queryInterface.changeColumn('users', 'april')]);
  },
};

Führen Sie dann die Migration aus:

sequelize db:migrate

Und das ist es! Beachten Sie, dass wir den Namen der Tabelle und die Spalte in der Tabelle übergeben haben, die wir aktualisieren möchten, queryInterface nimmt dies und erledigt seine Aufgabe in der Datenbank.

(II). Löschen einer Spalte
Lassen Sie uns die Spalte löschen, die Sie oben in der Benutzertabelle aktualisiert haben.

Sie müssen eine weitere Migrationsdatei erstellen.

sequelize migration:create --name name_of_your_migration

Bearbeiten Sie nun die Migrationsdatei und übergeben Sie sie mit der Methode removeColumn an ​​queryInterface.

return queryInterface.removeColumn('users', 'april');

Migration ausführen:

sequelize db:migrate

(III). Hinzufügen einer neuen Spalte
Lassen Sie uns nun eine neue Spalte in der Benutzermigration hinzufügen. Angenommen, wir möchten eine weitere Spalte mit dem Namen Juni hinzufügen. Erstellen Sie eine weitere Migrationsdatei.

sequelize migration:create --name name_of_your_migration

Bearbeiten Sie nun die Migrationsdatei und übergeben Sie sie mit der Methode addColumn an ​​queryInterface.

module.exports = {
  up: (queryInterface, Sequelize) => {
    return Promise.all([
      queryInterface.addColumn('users', 'june', {
        type: Sequelize.STRING,
        allowNull: true,
      }),
    ]);
  },

  down: (queryInterface) => {
    return Promise.all([queryInterface.removeColumn('users', 'june')]);
  },
};

Vergessen Sie nicht, Ihre Modelle mit Ihren neuen Änderungen zu aktualisieren.

Ich hoffe, dies erklärt die Modifizierungsmethoden klarer.

Dieser Beitrag wurde am 12. Mai 2020 von mir erstellt Dev.to und Mittel

Wurde aber aktualisiert.

Erfahren Sie mehr in einem 1:1 Mentoring mit mir.
Brauchen Sie Hilfe bei einem Projekt? Ich bin offen für freiberufliche Jobs.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *