Étant donné le modèle de suite suivant pour la table de métadonnées de mon projet Todo de base, j'aimerais apporter quelques modifications à l'aide des migrations de 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 utilise des fichiers de migration qui ressemblent essentiellement à des validations de base de données. Pour créer un fichier de migration, tapez dans votre ligne de commande :
npx sequelize-cli migration:generate --name data-columns-rename
Cela créera un fichier de migrations avec un modèle dans le dossier /migrations et le nom que vous avez fourni dans la commande ci-dessus (dans ce cas, data-columns-rename.js avec la date/heure actuelle devant).
Fichier de migrations de modèles créé pour vous :
'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'); */ } };
La commande async up est la commande qu'elle exécute pour essayer d'apporter des modifications à la table, et la commande async down s'exécute pour supprimer les modifications. Lorsque vous effectuez vos migrations, assurez-vous que les commandes down sont inversées.
Dans mon cas, j'essaie de modifier le nom de colonne pour certaines informations de base du tableau de type de tâche afin que mon tableau de migrations rempli ressemble à ceci :
'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') } };
(Ces changements sont simplement dus au fait que je ne suis toujours pas habitué au boîtier serpent comme le souhaite Postgres)
Une fois la table des migrations prête, exécutez-la avec cette commande
npx sequelize-cli db:migrate
Parmi les autres impressions résultant de l'exécution de la commande, le texte clé pour que je puisse voir le succès est :
== 20241224113716-metadata-columns-rename: migrating ======= == 20241224113716-metadata-columns-rename: migrated (0.065s)
Et vous pouvez voir les modifications vérifiées dans cette capture d'écran de DBeaver :
Faites-moi savoir s'il y a un intérêt pour un article décrivant les bases pour démarrer avec Sequelize.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!