Angesichts des folgenden Sequelize-Modells für die Metadatentabelle meines grundlegenden ToDo-Projekts möchte ich mithilfe der Sequelize-Migrationen einige Änderungen vornehmen.
module.exports = (sequelize, Sequelize) => { const Metadata = sequelize.define("metadata", { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, urgencyId: { type: Sequelize.INTEGER, allowNull: true }, dataId: { type: Sequelize.INTEGER, allowNull: true }, taskTypeId: { type: Sequelize.INTEGER, allowNull: true }, projectId: { type: Sequelize.INTEGER, allowNull: true }, data_id: { type: Sequelize.INTEGER, allowNull: true }, }); Metadata.associate = function (models) { Metadata.belongsTo(models.data,{ foreignKey: { name: 'data_id', allowNull: false, hooks: true }, onDelete: 'cascade' }); }; return Metadata; };
Sequelize verwendet Migrationsdateien, die im Wesentlichen wie Datenbank-Commits sind. Um eine Migrationsdatei zu erstellen, geben Sie in Ihrer Befehlszeile Folgendes ein:
npx sequelize-cli migration:generate --name data-columns-rename
Dadurch wird eine Migrationsdatei mit einer Vorlage im Ordner /migrations und dem Namen erstellt, den Sie im obigen Befehl angegeben haben (in diesem Fall data-columns-rename.js mit dem aktuellen Datum/der aktuellen Uhrzeit davor).
Für Sie erstellte Vorlagenmigrationsdatei:
'use strict'; /** @type {import('sequelize-cli').Migration} */ module.exports = { async up (queryInterface, Sequelize) { /** * Add altering commands here. * * Example: * await queryInterface.createTable('users', { id: Sequelize.INTEGER }); */ }, async down (queryInterface, Sequelize) { /** * Add reverting commands here. * * Example: * await queryInterface.dropTable('users'); */ } };
Der Befehl async up ist der Befehl, der ausgeführt wird, um zu versuchen, Änderungen an der Tabelle vorzunehmen, und der Befehl async down wird ausgeführt, um die Änderungen zu entfernen. Stellen Sie beim Durchführen Ihrer Migrationen sicher, dass die Abwärtsbefehle umgekehrt sind.
In meinem Fall versuche ich, einige Änderungen an den Spaltennamen für einige grundlegende Tabelleninformationen vom Typ „ToDo“ vorzunehmen, damit meine ausgefüllte Migrationstabelle wie folgt aussieht:
'use strict'; /** @type {import('sequelize-cli').Migration} */ module.exports = { async up (queryInterface, Sequelize) { await queryInterface.removeColumn('metadata','dataId') // renameColumn: table, old column name , new column name await queryInterface.renameColumn('metadata','urgencyId','urgency_id') await queryInterface.renameColumn('metadata','taskTypeId','task_type_id') await queryInterface.renameColumn('metadata','projectId','project_id') }, async down (queryInterface, Sequelize) { await queryInterface.addColumn('metadata','dataId', { type: Sequelize.INTEGER, allowNull: false }) await queryInterface.renameColumn('metadata','urgency_id','urgencyId') await queryInterface.renameColumn('metadata','task_type_id','taskTypeId') await queryInterface.renameColumn('metadata','project_id','projectId') } };
(Diese Änderungen sind einfach darauf zurückzuführen, dass ich es immer noch nicht gewohnt bin, den Fall so zu gestalten, wie es von Postgres gewünscht wurde)
Sobald die Migrationstabelle fertig ist, führen Sie sie mit diesem Befehl aus
npx sequelize-cli db:migrate
Neben anderen Ausdrucken bei der Ausführung des Befehls lautet der Schlüsseltext für mich, der den Erfolg erkennt:
== 20241224113716-metadata-columns-rename: migrating ======= == 20241224113716-metadata-columns-rename: migrated (0.065s)
Und Sie können die überprüften Änderungen in diesem Screenshot von DBeaver sehen:
Lassen Sie mich wissen, wenn Interesse an einem Beitrag besteht, der die Grundlagen für den Einstieg in Sequelize beschreibt.
Das obige ist der detaillierte Inhalt vonMigrationen weiterverfolgen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!