Secciones

Migraciones de Bases de Datos


NOTA: Las migraciones de Phalcon se han quitado de DevTools y se han movido a un repositorio separado.

Repositorio git del paquete

https://github.com/phalcon/migrations

Requerimientos

  • PHP >= 7.2
  • Phalcon >= 4.0.5

Instalación vía Composer

composer require --dev phalcon/migrations

Inicio rápido

Lo que necesita para un inicio rápido:

  • Fichero de configuración en la raíz de su proyecto (también puede pasarlos como parámetros dentro del entorno CLI)
  • Crear estructura de tablas de la base de datos
  • Ejecutar comando para generar las migraciones

Después de eso puede ejecutar esas migraciones (run) en otro entorno para crear la misma estructura de BD.

Crear fichero de configuración

<?php

use Phalcon\Config;

return new Config([
    'database' => [
        'adapter' => 'mysql',
        'host' => '127.0.0.1',
        'username' => 'root',
        'password' => '',
        'dbname' => 'db-name',
        'charset' => 'utf8',
    ],
    'application' => [
        'logInDb' => true,
        'migrationsDir' => 'db/migrations',
        'migrationsTsBased' => true, // true - Use TIMESTAMP as version name, false - use versions
        'exportDataFromTables' => [
            // Tables names
            // Attention! It will export data every new migration
        ],
    ],
]);

Generar migraciones

Generación básica

vendor/bin/phalcon-migrations generate

**Genera una tabla específica y exporta sus datos

vendor/bin/phalcon-migrations generate \
    --config=migrations.php \
    --table=users \
    --exportDataFromTables=users \
    --data=oncreate

Ejecutar migraciones

vendor/bin/phalcon-migrations run

Listar migraciones existentes

vendor/bin/phalcon-migrations list

Ejemplo de uso

Ejecutar migraciones desde directorio de migraciones específico

use Phalcon\Migrations\Migrations;

$migration = new Migrations();
$migration::run([
    'migrationsDir' => [
        __DIR__ . '/migrations',
    ],
    'config' => [
        'database' => [
            'adapter' => 'Mysql',
            'host' => 'phalcon-db-mysql',
            'username' => 'root',
            'password' => 'root',
            'dbname' => 'vokuro',
        ],
    ]
]);

Métodos de migración

Cada migración está en una clase separada que trabaja como entidad para una tabla de base de datos específica. Dentro de cada clase hay diferentes métodos que pueden ocurrir durante la ejecución de la migración.

Cada fichero de migración (y clase) puede implementar métodos específicos, que serán ejecutados según la operación solicitada. No hay restricciones sobre la lógica encapsulada en cada método.

Las tablas siguiente muestran los métodos de la Clase Migration. Se almacenan por orden de ejecución, del más antiguo al más reciente.

Ejecutándose hacia arriba

Nombre del método Descripción
morph Estructura morfológica de la tabla
afterCreateTable Hace algo inmediatamente después de crear la tabla
up Tabla creada y lista para trabajar con ella
afterUp Método extra para trabajar en algunos casos específicos

Ejecutándose hacia abajo

Nombre del método Descripción
down Normalmente se pone aquí eliminación de la tabla o truncamiento de datos
afterDown Método extra para trabajar después de que todo se haya limpiado
morph (de migración anterior) Como la migración ha sido movida hacia atrás, es necesario que todo se devuelva al estado anterior

Argumentos y opciones CLI

Argumentos

Argumento Descripción
generate Genera una Migración
run Ejecuta una Migración
list Lista todas las migraciones disponibles

Opciones

Acción Descripción
–config=s Fichero de configuración
–migrations=s Directorio de migraciones. Use cadena separada por comas para especificar múltiples directorios
–directory=s Directorio donde se creó el proyecto
–table=s Tabla a migrar. Nombre de la tabla o prefijo de tabla con asterisco. Por defecto: todas
–version=s Versión a migrar
–descr=s Descripción de la migración (usado para migraciones basadas en marcas de tiempo)
–data=s Exportar datos [‘always’ o ‘oncreate’] (Los datos se importan durante la ejecución de la migración)
–exportDataFromTables=s Exportar datos de tablas específicas, usar cadena separadas por comas.
–force Fuerza a sobreescribir migraciones existentes
–ts-based Versión de migraciones basadas en marcas de tiempo
–log-in-db Mantiene el registro de migraciones en la tabla de base de datos en lugar de en fichero
–dry Intenta la operación solicitada sin hacer cambios en el sistema (sólo generando)
–verbose Muestra información de depuración durante la operación (sólo ejecutando)
–no-auto-increment Deshabilita autoincremento (sólo generando)
–skip-ref-schema Omitir referencedSchema en la migración generada (sólo generando)
–skip-foreign-checks Envuelve la consulta con SET FOREIGN_KEY_CHECKS antes y después de la ejecución de una consulta (sólo ejecutando)
–help Muestra esta ayuda

Migraciones basadas en marcas de tiempo

El uso de este enfoque es útil cuando más de un desarrollador está participando en la gestión de la estructura de base de datos. Use 'migrationsTsBased' => true en el fichero de configuración o la opción --ts-based en el entorno CLI. También, necesita especificar el sufijo descr, que podría ser cualquier cosa que quiera, por ejemplo: versión semántica.

Comando actual

vendor/bin/phalcon-migrations generate --ts-based --descr=1.0.0

Producirá el nombre de carpeta con tales nombres

  • 1582539287636860_1.0.0
  • 1682539471102635_1.0.0
  • 1782539471102635_1.0.0

Las migraciones se ejecutarán de la más antigua a la más reciente.

NOTA: Cuando se ejecuten las migraciones, las aplicación escanea todas las migraciones disponibles y su estado independientemente de su “edad”. Si una o más no fueron ejecutadas en una ejecución anterior, serán ejecutadas en la siguiente ejecución.