Memandangkan model jujukan berikut untuk jadual metadata projek todo asas saya, saya ingin membuat beberapa perubahan menggunakan migrasi 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 menggunakan fail migrasi yang pada asasnya seperti komit pangkalan data. Untuk membuat jenis fail migrasi dalam baris arahan anda:
npx sequelize-cli migration:generate --name data-columns-rename
Ini akan mencipta fail migrasi dengan templat dalam folder /migrations dan nama yang anda berikan dalam arahan di atas (dalam kes ini data-columns-rename.js dengan tarikh/masa semasa di hadapan).
Fail pemindahan templat dibuat untuk anda:
'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'); */ } };
Arahan async up ialah perintah yang dijalankan untuk cuba membuat perubahan pada jadual dan perintah async down dijalankan untuk mengalih keluar perubahan. Apabila anda melakukan migrasi anda, pastikan arahan bawah adalah terbalik.
Dalam kes saya, saya cuba melakukan beberapa perubahan nama lajur untuk beberapa maklumat jadual jenis todo asas supaya jadual migrasi saya yang diisi kelihatan seperti ini:
'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') } };
(Perubahan ini hanyalah saya masih belum digunakan untuk kes ular seperti yang dikehendaki oleh postgres)
Setelah jadual migrasi sedia, jalankannya dengan arahan ini
npx sequelize-cli db:migrate
Antara cetakan lain daripada menjalankan arahan, teks utama untuk saya melihat kejayaan ialah:
== 20241224113716-metadata-columns-rename: migrating ======= == 20241224113716-metadata-columns-rename: migrated (0.065s)
Dan anda boleh melihat perubahan yang disahkan dalam tangkapan skrin ini daripada DBeaver:
Beri tahu saya jika ada minat dalam siaran yang menerangkan asas-asas permulaan dengan sekuel.
Atas ialah kandungan terperinci Sekuel penghijrahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!