Phinx

PHP Migraciones de Base de Datos Para Todos.

¿Qué es Phinx?

Herramienta de migración de Base de Datos para PHP.

¿Qué es una migración?

Proceso de selección, preparación, extracción y transformación de datos en un sistema informático.

Scripts de migración

Secuencia de comandos

  • (UP) versión nueva de la BD.

  • (DOWN) versión anterior de la BD.

Importancia

  • Documentan el estado del esquema de la base de datos en cada punto de la vida de un sistema.

  • Facilitan el roll-back.

Importancia

Historia

  • Creado en 2012 por Rob Morgan.

  • 800 pull requests.

  • En 2017 paso a ser parte de Cake Software Foundation.

Historia

¿Porqué usar Phinx?

  • Fácil instalación.

  • Configurable.

  • Independiente de Frameworks.

  • Ligero.

Admite

  • Migraciones escritas en PHP y SQL.

  • PHP; migraciones portátiles entre proveedores de BD.

  • SQL; crear manualmente consultas avanzadas. 

Instalación

$ php composer.phar require robmorgan/phinx

$ php composer.phar install
$ vendor/bin/phinx

Ejecución

Comandos

Available commands:
  breakpoint   Manage breakpoints
  create       Create a new migration
  help         Displays help for a command
  init         Initialize the application for Phinx
  list         Lists commands
  migrate      Migrate the database
  rollback     Rollback the last or to a specific migration
  status       Show migration status
  test         Verify the configuration file
 seed
  seed:create  Create a new database seeder
  seed:run     Run database seeders
$ vendor/bin/phinx list

Configuración

paths:
    migrations: "%%PHINX_CONFIG_DIR%%/config/migration"

environments:
    default_migration_table: phinx_migration
    default_database: dev

    dev:
        adapter: mysql
        host: localhost
        name: dev_db
        user: user
        pass: password
        port: 3306

    test:
        adapter: mysql
        host: localhost
        name: test_db
        user: user
        pass: password
        port: 3306

Crear una migración

$ vendor/bin/phinx create MyFirstMigration
config/migration/20180912213646_my_first_migration.php
<?php


use Phinx\Migration\AbstractMigration;

class MyFirstMigration extends AbstractMigration
{
    
}

Metodo change

<?php


use Phinx\Migration\AbstractMigration;

class MyFirstMigration extends AbstractMigration
{
    public function change()
    {
        // create the table
        $table = $this->table('new_table');
        $table->addColumn('new_table_id', 'integer')
              ->addColumn('created', 'datetime')
              ->create();
    }
}

Metodos up y down

<?php


use Phinx\Migration\AbstractMigration;

class MyFirstMigration extends AbstractMigration
{
    public function up(): void
    {
        $this->execute('
            ALTER TABLE `new_table`
              ADD COLUMN `new_column` VARCHAR(255) NULL AFTER `new_table_id`;
        ');
    }

    public function down(): void
    {
        $this->execute('
            ALTER TABLE `new_table`
              DROP COLUMN `new_column`;
        ');
    }
}

Ejecutar migraciones

$ phinx migrate -e dev
$ phinx migrate -e dev -t 20110103081132

Rollback de migraciones

$ phinx rollback -e dev

$ phinx rollback -e dev -t 20120103083322
$ phinx rollback -e development -d 2012
$ phinx rollback -e development -d 201201
$ phinx rollback -e development -d 20120103

Revisar estado

$ phinx status -e dev

Fuentes

https://github.com/cakephp/phinx

https://phinx.org/

http://docs.phinx.org/

 

https://robmorgan.id.au/

@_rjm_

Por su atención

¡ G R A C I A S !

@sagmmd

 

 

Sr Software Engineer en             

PHINX

By smmd