Adonis.js — Migraciones
Leer en blog oficial (elihu.dev): Adonis Introducción
A grandes rasgos, una migración es un control de versiones sobre los cambios que se realizan a la base de datos en un proyecto.
En Adonis.js contamos con un modulo para realizar migraciones vía consola de comandos CLI. Cada migración crea un fichero en la carpeta “database/migrations”. Que a su vez obtiene el nombre de la tabla a crear o alterar más la fecha de creación exacta con Time stamp.
Las ventajas de utilizar un sistema de migraciones son muchas, pero estas pueden ser resumidas en factores asociados a la escalabilidad de tú sistema y simplicidad con la que un equipo de desarrollo puede configurar un entorno de trabajo. Para comenzar a utilizar migraciones Adonis.js necesitarás lo siguiente.
Requisitos
- Proyecto de Adonis configurado
- Base de datos (MySQL | SQLite)
- Proyecto Adonis configurado para utilizar una base datos
Configuración / Verificación
Adonis utiliza una serie de librerías que gestionan de forma interna todas estas operaciones de creación y actualización de la base de datos. Para verificar que tu proyecto cuenta con todo lo necesario puede ejecutar el comando:
adonis migration:status
Con el cual verificaremos que el sistema tenga incluido el proveedor necesario. En caso de obtener un error, revisa tu configuración en búsqueda del proveedor del ORM Lucid y migraciones en la carpeta “start/app.js”
// Debería lucir algo asíconst providers = [
'@adonisjs/lucid/providers/LucidProvider'
]
const aceProviders = [
'@adonisjs/lucid/providers/MigrationsProvider'
]
Crear una migración
Al contar con todas las configuraciones listas, estamos listos para realizar una migración, como podrás imaginarte las migraciones se realizan utilizando el comando adonis make, pero esta ocasión agregaremos lo siguiente:
adonis make:migration places --action create
Indicando con dos puntos que crearemos una migración, seguido de un espacio el nombre de la migración y finalmente una bandera “ — action” con el valor “create” que indicará al CLI si debe crear una nueva tabla o seleccionarla para modificarla.
Por convención todas las migraciones tienen que hacer referencia a una tabla en ingles con el nombre pluralizado. “place” = “places” Siguiendo las reglas del idioma para los plurales.
Al ejecutar el comando obtendremos la confirmación de haber efectuado la migración.
Configuración de migración
Tras ejecutar el comando de creación, tendremos el nuevo archivo de la migración en nuestro proyecto. el cual contiene un clase con dos funciones, una llamada UP y otra DOWN. La función UP se ejecuta cuando invocamos la función de migración “adonis migration:run” y la función DOWN se llama cuando se realiza un Rollback o retroceso “adonis migration:rollback”.
Ahora deberemos configurar la migración para tener las columnas necesarias en nuestro modelo de base de datos.
Adonis utiliza la librería Knex.js para obtener el SQL necesario para ejecutar una operación, así que podrás utilizar las funciones de Knex.js en adonis sin problemas.
Los principales tipos a utilizar son: Integer, Float, String, Text y Boolean
y podríamos utilizar una descripción bastante similar a la siguiente:
Existen muchas más funciones disponibles para la creación de columnas con Knex, a continuación podrás ver algunas de estas:
- Nulos
table.string('notes').nullable()
- No nulos
table.string('name').notNullable()
- Valores por defecto
table.text('description').defaultTo('Sin descripción')
- Limite de caracteres para Cadenas
table.string('name', 150)
- Referencias y llaves foráneas
table.integer('user_id').unsigned().references('id').inTable('users')
Ejecutar migración
Tras contar con un esquema de base de datos definido en el archivo de la migración, solo resta ejecutar un comando del CLI en adonis para que estos cambios se reflejen en la base de datos.
Con el comando:
adonis migration:run
Deberíamos obtener un mensaje similar al siguiente
Si quisieramos regresar a un estado anterior, solo bastaría con que invocar a comando:
adonis migration:rollback
Y con esto regresaríamos a un estado anterior. Recuerda que las migraciones funcionan como una pila, el ultimo en entrar, será el primero en salir. por lo que si realizar más de una migración a la vez, el sistema quitará todas aquellas que se procesaron en esa ejecución de comando.
Realiza tu plan de migraciones por pequeños pasos, no definas todo en un inicio, la idea es ir agregando parte por parte, y esto garantizará que en un futuro las migraciones se ejecuten correctamente y sin errores entre plataformas.