Las migraciones en CodeIgniter 4
Vamos a trabajar con las migraciones en CodeIgniter 4, para eso simplemente tenemos que crear un archivo o una migración mediante nuestro spark que viene siendo la lìnea de comandos que nos ofrece CodeIgniter 4.
Las migraciones son un mecanismo muy sencillo que tenemos para tener una relación de uno a uno entre las tablas de la base de datos con la definición que tengamos en nuestro proyecto; las migraciones son empleadas por todo tipo de framework modernos como Django, que te recomiendo que leas la publicación anterior para tener otra visión de las migraciones en los frameworks como CodeIgniter 4.
Crear migraciones
Así que, abrimos nuestra terminal o CMD y nos posicionamos en la raíz de nuestro proyecto y tenemos que ejecutar el siguiente comando para crear una migración:
php spark migrate:create [filename]
En nuestro caso vamos a crear una migración de ejemplo, llamada movies, para manejar un listado de películas como hacemos el el curso de CodeIgniter 4:
php spark migrate:create movies
Esto nos genera un archivo para manejar la migración en app/Database/Migrations el cual tenemos que indicar la definición para nuestras columnas de la tabla que queramos crear.
Como puedes ver, anexo al nombre, tiene un número que simplemente es una fecha y de esta manera C4 garantiza nombres únicos en las migraciones.
Su definición o la definición que va a tener cada columna a llevamos a cabo mediante un array como el siguiente:
<?php namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class Movies extends Migration
{
public function up()
{
$this->forge->addField([
'id' => [
'type' => 'INT',
'constraint' => 5,
'unsigned' => TRUE,
'auto_increment' => TRUE
],
'category_id' => [
'type' => 'INT',
'constraint' => 5,
'unsigned' => TRUE
],
'title' => [
'type' => 'VARCHAR',
'constraint' => '255',
],
'description' => [
'type' => 'TEXT',
'NULL' => TRUE,
],
]);
$this->forge->addKey('id', TRUE);
$this->forge->createTable('movies');
}
//--------------------------------------------------------------------
public function down()
{
$this->forge->dropTable('movies');
}
}
Por lo tanto, tenemos un esquema muy sencillo con el cual trabajar, no es necesario aprender nombre de funciones como ocurre en Laravel ni nada por el estilo, una sencilla definición en base a nombres.
Como puedes ver, tenemos que implementar dos funciones, la que se encarga de crear la estructura, tabla o agregar una nueva columna o algo similar, y otra funcion que se encarga de revertir los cambios anteriores, y esto es, para que nosotros podemos realizar operaciones tanto de ejecutar o crear las migraciones como revertir las mismas.
Ejecutar la migración
Luego ejecutamos el siguiente comando para ejecutar la migración anterior:
php spark migrate
Revertir las migraciones
Puede que te hayas dado cuenta que definistes algo incorrecto en la migración anterior que ejecutantes, para revertir los cambios en la base de datos y corregirla:
php spark migrate:rollback
Y aquí lo importante de desarrollar el método down al momento de definir la migración.
Refrescar migraciones
También podemos "refrescar" todas las migraciones que lo que hace sería un rollback de TODAS las migraciones para volver a ejecutarlas nuevamente.
php spark migrate:refresh
Recuerda que las migraciones son un componente que usan los frameworks modernos como CodeIgniter 4 para poder crear una tabla en la base de datos establecida.
Consideraciones
Las migraciones son un mecanismo que podemos emplear para editar/modificar una tabla existente o crear nuevas; para eso fíjate los siguientes nombres:
20121031100537_add_blog.php 2012-10-31-100538_alter_blog_track_views.php 2012_10_31_100539_alter_blog_add_translations.php
- Empleamos un nombre por ejemplo como alter_blog_** para agregar columnas a la tabla existente llamada blog.
- Empleamos add_blog (aunque a mi en lo personal me gusta simplemente blog) para crear un nuevo componente/tabla que en este caso sería una tabla llamada blog.
- Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter