Migrations de bases de données en PHP : outils modernes et pratiques
Les migrations de bases de données sont une partie essentielle du développement moderne en PHP. Elles permettent aux équipes de développeurs de synchroniser les modifications du schéma de la base de données, de suivre l'historique des changements et de les appliquer automatiquement dans différents environnements (environnement local, staging, production). Dans cet article, nous examinerons les principales bibliothèques et outils pour les migrations en PHP, leur installation, leur configuration et des exemples d'utilisation.
Que sont les migrations et pourquoi en a-t-on besoin ?
Une migration de base de données est un script qui décrit une modification du schéma : création d'une table, ajout/suppression de colonnes, d'index, de clés étrangères. Les migrations permettent de :
- Versionner les modifications de la structure de la base de données avec le code de l'application.
- Automatiser le déploiement sur de nouveaux serveurs.
- Annuler les modifications si nécessaire.
- Travailler en équipe sans conflits.
Bibliothèques populaires pour les migrations en PHP
1. Phinx (robmorgan/phinx)
Phinx est l'une des bibliothèques indépendantes les plus populaires pour les migrations. Elle n'est liée à aucun framework spécifique et prend en charge MySQL, PostgreSQL, SQLite, SQL Server.
Installation via Composer :
composer require robmorgan/phinxCréation du fichier de configuration phinx.yml :
paths: migrations: '%%PHINX_CONFIG_DIR%%/db/migrations' seeds: '%%PHINX_CONFIG_DIR%%/db/seeds'
environments: default_migration_table: phinxlog default_database: development development: adapter: mysql host: localhost name: myapp_db user: root pass: '' port: 3306 charset: utf8Exemple de migration (création de la table users) :
<?php
use Phinx\\Migration\\AbstractMigration;
class CreateUsersTable extends AbstractMigration{ public function change() { $table = $this->table('users', ['id' => false, 'primary_key' => ['id']]); $table->addColumn('id', 'biginteger', ['identity' => true]) ->addColumn('username', 'string', ['limit' => 50]) ->addColumn('email', 'string', ['limit' => 100]) ->addColumn('created_at', 'datetime') ->addColumn('updated_at', 'datetime', ['null' => true]) ->addIndex(['email'], ['unique' => true]) ->create(); }}Exécution des migrations :
vendor/bin/phinx migrate -e development2. Doctrine Migrations (doctrine/migrations)
Doctrine Migrations fait partie de l'écosystème Doctrine ORM. Idéal pour les projets utilisant déjà Doctrine. Prend en charge tous les SGBD populaires.
Installation :
composer require doctrine/migrationsConfiguration (migrations.php) :
<?phpreturn [ 'table_storage' => [ 'table_name' => 'doctrine_migration_versions', ], 'migrations_paths' => [ 'App\\Migrations' => './migrations', ], 'all_or_nothing' => true, 'transactional' => true, 'check_database_platform' => true,];Exemple de migration :
<?php
namespace App\\Migrations;
use Doctrine\\DBAL\\Schema\\Schema;use Doctrine\\Migrations\\AbstractMigration;
class Version20240101000000 extends AbstractMigration{ public function up(Schema $schema): void { $table = $schema->createTable('products'); $table->addColumn('id', 'integer', ['autoincrement' => true]); $table->addColumn('name', 'string', ['length' => 255]); $table->addColumn('price', 'decimal', ['precision' => 10, 'scale' => 2]); $table->se Aussi dans la bibliothèque
unbuild pour TypeScript : guide complet avec exemples
Rate Limiting en Kotlin : bibliothèques et exemples pratiques
Planificateur de tâches PHP : gestionnaire de files d'attente de type cron en PHP
Travailler avec XML en Rust : bibliothèques roxmltree, quick-xml et serde-xml-rs