鑑於我的基本待辦事項專案的元資料表有以下sequelize模型,我想使用sequelize的遷移進行一些更改。
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 使用本質上類似於資料庫提交的遷移文件。 要在命令列中建立遷移檔案類型:
npx sequelize-cli migration:generate --name data-columns-rename
這將建立一個遷移文件,其中包含/migrations 資料夾中的範本以及您在上面命令中提供的名稱(在本例中為data-columns-rename.js,前面帶有當前日期/時間) 。
為您建立的範本遷移檔案:
'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'); */ } };
async up 命令是它運行以嘗試對錶進行更改的命令,async down 命令運行以刪除更改。 當您進行遷移時,請確保向下命令相反。
就我而言,我正在嘗試對一些基本的待辦事項類型表資訊進行一些列名稱更改,因此我填寫的遷移表如下所示:
'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') } };
(這些變化只是我還沒按照 postgres 的要求使用蛇形案例)
遷移表準備就緒後,使用此命令運行它
npx sequelize-cli db:migrate
在運行命令的其他列印輸出中,我看到成功的關鍵文字是:
== 20241224113716-metadata-columns-rename: migrating ======= == 20241224113716-metadata-columns-rename: migrated (0.065s)
您可以在 DBeaver 的螢幕截圖中看到驗證的變更:
如果您對描述sequelize 入門基礎知識的帖子感興趣,請告訴我。
以上是連續遷移的詳細內容。更多資訊請關注PHP中文網其他相關文章!