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: herramientas y prácticas modernas



Las migraciones de bases de datos son una parte esencial del desarrollo moderno en PHP. Permiten a los equipos de desarrolladores sincronizar los cambios en el esquema de la base de datos, rastrear el historial de cambios y aplicarlos automáticamente en diferentes entornos (entorno local, staging, producción). En este artículo, analizaremos las principales bibliotecas y herramientas para migraciones en PHP, su instalación, configuración y ejemplos de uso.



¿Qué son las migraciones y por qué son necesarias?



Una migración de base de datos es un script que describe un cambio en el esquema: creación de una tabla, adición/eliminación de columnas, índices, claves foráneas. Las migraciones permiten:

  • Versionar los cambios en la estructura de la BD junto con el código de la aplicación.
  • Automatizar el despliegue en nuevos servidores.
  • Revertir los cambios cuando sea necesario.
  • Trabajar en equipo sin conflictos.


Bibliotecas populares para migraciones en PHP



1. Phinx (robmorgan/phinx)

Phinx es una de las bibliotecas independientes más populares para migraciones. No está vinculada a un framework específico y es compatible con MySQL, PostgreSQL, SQLite, SQL Server.



Instalación a través de Composer:

composer require robmorgan/phinx


Creación del archivo de configuración 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: utf8


Ejemplo de migración (creación de la tabla 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(); }}


Ejecución de migraciones:

vendor/bin/phinx migrate -e development


2. Doctrine Migrations (doctrine/migrations)

Doctrine Migrations es parte del ecosistema de Doctrine ORM. Es ideal para proyectos que ya utilizan Doctrine. Es compatible con todos los SGBD populares.



Instalación:

composer require doctrine/migrations


Configuración (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,];


Ejemplo de migración:

<?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

Recommendations