Migraciones de Bases de Datos

NOTE: Phalcon migrations have been removed from DevTools and moved to a separate repository.
Repositorio git del paquete
https://github.com/phalcon/migrations
Requerimentos
- PHP >= 7.5
- Phalcon >= 5.0.0
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\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',
// true - TIMESTAMP, false - versions
'migrationsTsBased' => true,
'exportDataFromTables' => [
// Tables names
],
],
]);
NOTE: If exportDataFromTables
is set, data will be exported with every 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
Each migration is a separate class that works as an entity for specific database table. 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 |
(from previous migration) As the migration was moved backward, there need to be all returned to previous state |
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 |
Export data from specific tables, use comma separated string |
--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.
NOTE: Whenever migrations are run, the application scans all available migrations and their status irrespective of their “age”. Si una o más no fueron ejecutadas en una ejecución anterior, serán ejecutadas en la siguiente ejecución.