Migraciones de bases de datos en PHP: guía completa de herramientas y bibliotecas
El desarrollo de aplicaciones web en PHP está intrínsecamente ligado a la gestión de la estructura de la base de datos. Durante la evolución del proyecto, el esquema de la BD cambia constantemente: se añaden nuevas tablas, se modifican campos, se introducen índices. La ejecución manual de consultas SQL en diferentes entornos (local, staging, producción) provoca errores, pérdida de datos y confusión. La solución a este problema son las migraciones de bases de datos: una forma programática de versionar y aplicar cambios en el esquema.
¿Qué son las migraciones y por qué son necesarias?
Una migración es una clase PHP que contiene dos métodos: up() (aplicar cambios) y down() (revertir cambios). Cada migración tiene un identificador único (generalmente una marca de tiempo) y se ejecuta secuencialmente. Las principales ventajas de usar migraciones son:
- Versionado del esquema de la BD — todo el historial de cambios se almacena en el código (generalmente en Git).
- Automatización del despliegue — basta con ejecutar un comando para actualizar la BD en cualquier servidor.
- Seguridad — posibilidad de revertir cambios fallidos.
- Trabajo en equipo — todos los desarrolladores sincronizan la estructura de la BD automáticamente.
Bibliotecas populares para migraciones en PHP
Consideremos las tres herramientas más comunes: Phinx, Doctrine Migrations y las integradas Laravel Migrations.
1. Phinx (robmorgan/phinx)
Phinx es una herramienta independiente del framework para migraciones y siembra (rellenar con datos de prueba). Soporta MySQL, PostgreSQL, SQLite, SQL Server y otros DBMS. La instalación se realiza a través de Composer:
composer require robmorgan/phinxEjemplo de migración para crear una tabla de usuarios:
<?phpuse Phinx\\Migration\\AbstractMigration;
class CreateUsersTable extends AbstractMigration{ public function up() { $table = $this->table('users'); $table->addColumn('username', 'string', ['limit' => 50]) ->addColumn('email', 'string') ->addColumn('password', 'string') ->addColumn('created_at', 'datetime') ->addIndex(['email'], ['unique' => true]) ->create(); }
public function down() { $this->table('users')->drop()->save(); }}Phinx proporciona un DSL (lenguaje específico del dominio) conveniente para describir el esquema, así como soporte integrado para siembras (seeders). Comandos principales:
phinx migrate— aplicar todas las migraciones nuevas.phinx rollback— revertir la última migración.phinx status— mostrar el estado de las migraciones.phinx seed:run— llenar la BD con datos de prueba.
2. Doctrine Migrations
Doctrine Migrations es parte del ecosistema de Doctrine ORM, pero también se puede usar sin él. Se distingue por su potente integración con Doctrine DBAL (capa de abstracción de base de datos). Instalación:
composer require doctrine/migrationsEjemplo de migración usando Doctrine DBAL:
<?phpuse Doctrine\\DBAL\\Migrations\\AbstractMigration;use Doctrine\\DBAL\\Schema\\Schema;
class Version20240101000000 extends AbstractMigration{ public function up(Schema $schema) { $table = $schema->createTable('users'); $table->addColumn('id', 'integer', ['autoincrement' => true]); $table->addColumn('username', 'string', ['length' => 50]); $table->addColumn('email', 'string'); $table->setPrimaryKey(['id']); $table->addUniqueIndex(['email']); }
public function down(Sc También en la biblioteca
Doctrine DBAL PHP: guía completa con ejemplos prácticos
Trabajo con Markdown en Kotlin: bibliotecas, análisis y generación
Planificador de tareas Rust: descripción general de bibliotecas y ejemplos de código
Spring Boot + Kotlin: guía completa con ejemplos prácticos