Migraciones de bases de datos en PHP: Guía completa de herramientas y bibliotecas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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/phinx

Ejemplo 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/migrations

Ejemplo 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

Recommendations