Investigando… para empezar… entre charla y charla… entre mejoras y mejoras… pensando en futuro… después de mucho renegar… para ésto… para lo otro…
¿Cómo empiezo mi primer post?
La verdad que «investigando» es una buena manera. De la mano de compañeros especializados y curiosos en seguir mejorando, queriendo conocer en profundidad el framework que tanto nos da día a día, llegamos a una de los tantos plugins que viene a simplificarnos la manera de trabajar. Basta contar con una organización previa, un buen armado y unas lineas de código, para tener todos la misma versión de base de datos.
CakePHP, nuestro framework favorito, nos provee una herramienta para realizar esto llamada Migrations, la cual nos sirve para versionar nuestra DB en código, en este caso, PHP, migrar hacia arriba, hacia abajo, en la implementación, Seed para insertar sets de datos, integración con cualquier motor de DB, entre otras cosas.
Esta herramienta es una implementación de la librería Phinx, el cual tiene de slogan “Phinx makes it ridiculously easy to manage the database migrations for your PHP app._ (Phinx hace ridiculamente fácil manejar migraciones de bases de datos en tu aplicación PHP)”, y es lo que realmente hace.
Cuando varios compañeros conforman un mismo proyecto, existen ciertas dificultades, la compatibilidad de tener todos la misma versión de Base de Datos, es una de ellas. Si uno modifica la estructura, tiene que hacerle saber al resto qué cambios ha realizado y enviarle las correcciones con el fin de no crear conflicto a posteriori. ¡Basta de eso! basta de pasarnos lineas de código SQL para tener todas las base de datos actualizadas. Ahora solo queda actualizar los cambios, correr las correcciones y listo.
Las Bases de Datos ahora se encuentran dentro de archivos PHP, donde se puede crear o eliminar tablas, agregar o eliminar columnas, crear índices e incluso insertar datos, con la importancia de poder trackear con un sistema de control de versiones.
A continuación se muestra como configurar y ciertos comandos para realizar la migración.
Configuración
->Para usar el puglins debe estar cargado en config/boostrap.php
Plugin::load('Migrations');
->Tener configurada la base de datos en config/app.php
Algunos ejemplo de creación de tablas y de agregar campos para ver como funciona:
1) Para crear tablas con bake:
$ bin/cake bake migration CreateProductos nombre:string descripcion:text created modified
Genera un archivo en config/Migrations:
20180917143511_CrearProductos.php
<?php
use Migrations\AbstractMigration;
classCreateProductosextendsAbstractMigration
{
publicfunctionchange()
{
$table = $this->table('productos');
$table->addColumn('nombre', 'string', [
'default'=>; null,
'limit'=>; 255,
'null'=>; false,
]);
$table->addColumn('descripcion', 'text', [
'default'=>; null,
'null'=>; false,
]);
$table->addColumn('created', 'datetime', [
'default'=>; null,
'null'=>; false,
]);
$table->addColumn('modified', 'datetime', [
'default'=>; null,
'null'=>; false,
]);
$table->create();
}
}
?>
2) Para agregar columnas en tabla existente con bake:
$ bin/cake bake migration AddPrecioToProductos precio:decimal
Genera otro archivo en config/Migrations:20180917144440_AddPrecioToProductos.
<?php
use Migrations\AbstractMigration;
classAddPrecioToProductosextendsAbstractMigration
{
publicfunctionchange()
{
$table = $this->table('productos');
$table->addColumn('precio', 'decimal', [
'default'=>; null,
'null'=>; false,
]);
$table->update();
}
}
?>
Generar una migración con una Base de Datos existente:
$ bin/cake bake migration_snapshot nombre
Los nombres de la migraciones tienen un prefijo con la fecha en que se crearon con el formato:
YYYYMMDDHHMMSS_NombreMigracion.php
Comandos:
Para correr todas las migraciones:
$ bin/cake migrations migrate
Se puede especificar la version a migrar:
$ bin/cake migrations migrate -t YYYYMMDDHHMMSS
Para hacer un rollback:
$ bin/cake migrations rollback
También se puede especificar la version a hacer rollback:
$ bin/cake migrations rollback -t YYYYMMDDHHMMSS
Para migrar los datos. Ejecuta todas las seed disponibles en orden alfabetico.
Los archivos se encuentran en config/Seeds:
->Sin parametros
$ bin/cake migrations seed
->Se puede especificar que seed migrar
$ bin/cake migrations seed --seed UsuariosSeed
<?php
use Migrations\AbstractSeed;
use Cake\Auth\DefaultPasswordHasher;
classUsuariosSeedextendsAbstractSeed
{
publicfunctioninicial()
{
// Para clear las claves cifradas
$hasher = new DefaultPasswordHasher();
$data = [
[
'email'=>; '[email protected]',
'password'=>; $hasher->hash('password'),
'nombre'=>; 'NOMBRE',
'apellido'=>; 'APELLIDO',
'rol'=>; 'user',
'created'=>; date('Y-m-d H:i:s'),
'modified'=>; date('Y-m-d H:i:s')
],
];
$table = $this->table('usuarios');
$table->insert($data)->save();
}
}
?>
Se puede saber el estado de las migraciones (que migraciones se han ejecutado):
$ bin/cake migrations status
Marcar migraciones migradas :
->Todas:
$ bin/cake migrations mark_migrated
->Hasta una versión específica:
$ bin/cake migrations mark_migrated --target=YYYYMMDDHHMMSS
->Hasta una versión específica no incluida:
$ bin/cake migrations mark_migrated --target=YYYYMMDDHHMMSS --exclude
->Solo una:
$ bin/cake migrations mark_migrated --target=YYYYMMDDHHMMSS --only
Fuentes:
– https://cakephp.org/
– https://phinx.org/