Si eres de los que cargaba su script de instalación de base de datos en todos los proyectos que hacía solo para correrlo en local cada que tocaba compartirlo con algún colega, ¡ya te puedes olvidar de ello! porque en esta publicación te explicaremos todo lo que necesitas saber sobre las migraciones en Laravel 8.
¿Qué son las migraciones en Laravel?
Las migraciones en Laravel no son más que la estructura de nuestras tablas de bases de datos, pero no en sql, sino que hechas en php; esto es así porque Laravel se encargará de crear la base de datos por nosotros lo que representa una ventaja al momento de reproducir nuestra base de datos en otros equipos.
¿Cómo crear migraciones en Laravel 8?
Para crear migraciones en Laravel requieres el comando: “php artisan make:migration” + “el nombre de tu tabla”, pero el nombre de la tabla debe tener la siguiente convención:
php artisan make:migration create_hoteles_table
Inmediatamente después verás en tu consola de comandos que ha sido creado un archivo que tendrá por nombre: la fecha en la que fue creada seguido de la convención de nombres propia de Laravel para las migraciones.
¿Cómo es la estructura de una migración?
La migración que acabamos de crear se guardará en la ubicación: database/migrations, si la abrimos notaremos en ella una clase que usa el nombre que usamos en el comando para crear la migración, como nombre de clase, además notarás dos funciones: up y down
Up: Esta función es la que se ejecutará cuando corras la migración. En su interior encontrarás la Fachada “Schema” que se encargará de crear la tabla que pasará a ser una tabla real en tu base de datos, para ello requiere del nombre que tendrá la tabla y una función anónima a la que deberás llenar con cada columna que necesites en tu tabla.
Down: Esta función se encargará de revertir todo lo que hace la función Up, por ello la única línea que tiene busca la tabla y la elimina, por lo general no tienes que escribir nada aquí, ya que es Laravel a través de los comandos: “php artisan migrate:rollback”, “php artisan migrate:fresh” quien hace uso de la misma.
¿Cómo aplicamos las migraciones de Laravel a una base de datos ya terminada?
Hasta ahora, sabemos cómo crear una migración y cómo es su estructura, pero no basta eso para ponernos a escribir dentro de ellas, necesitamos un ejemplo para entender mucho mejor que métodos escritos en PHP se corresponden con qué tipo de dato de SQL. Por ello planteamos un diseño de base de datos para explicarte mejor como escribir migraciones.
Crea una migración por cada tabla que tengas en tu diseño
Ya tenemos el diseño de nuestra base de datos para nuestro proyecto, pero empezar a tipear la estructura en SQL llevará tiempo, tiempo que podemos ahorrarnos con el uso de migraciones, lo primero como te imaginaras, será crear una migración por cada una de las tablas que tenemos en nuestro diseño.
El orden en el que las crees importa mucho, asegurate de crear primero las tablas que no tienen relaciones para luego crear las tablas que si tienen relaciones, así cuando corras todas las migraciones no tendrás errores de referencias a tablas que no existen, solo porque creaste una tabla que tiene una relación foránea con otra que aún no ha sido creada.
Observa los tipos de datos en SQL y busca el método equivalente en PHP
Ahora revisaremos cada uno de los campos de las tablas propuestas y busquemos qué métodos se acomodan más al tipo de dato que tiene asignado:
Tabla Hoteles
id: Para este y todos los ids a continuación Laravel recomienda el uso de “bigIncrements” básicamente porque representa un tipo entero (bigInt) y es autoincremental, característica propia de las claves primarias.
Nombre / Dirección / Correo electrónico / Teléfono: Para estos cuatro campos varchar usaremos el mismo método: “string”, como te imaginaras indica que el campo es una cadena de caracteres, (varchar) si quieres especificar cuántos caracteres, solo debes colocar la cantidad como parámetro, después del nombre que tendrá el campo.
Tabla Idiomas y Documentos
Id: Para este y todos los ids a continuación Laravel recomienda el uso de “bigIncrements” básicamente porque representa un tipo entero (bigInt) y es autoincremental, característica propia de las claves primarias.
nombre: Para el campo nombre de las tablas Idiomas y Documentos usaremos el método propio para los datos varchar, “string” pero con solo 10 caracteres.
Tabla Checkin
Id: Para este y todos los ids a continuación Laravel recomienda el uso de “bigIncrements” básicamente porque representa un tipo entero (bigInt) y es autoincremental, característica propia de las claves primarias.
Entrada reserva / Salida reserva / Ingreso checkin: Estos tres campos son del tipo fecha, (date) el método que se debe usar para los dos primeros campos es “date”, pero para el tercero debes usar “dateTime” porque también guarda la hora además de la fecha y si gustas también puedes hacer que se agregue la fecha actual por defecto con el método “default”
Número adultos / Número niños: En ambos campos se almacenan datos de tipo numérico (int) por lo tanto les corresponde el método: “Integer”, pero en este particular diseño puede darse el caso que requieras campos que permitan valores nulos, para ellos solo debes agregar el método “nullable()” al final.
Código reserva: Este es el único campo de tipo cadena (varchar) en la tabla, como ya vimos previamente en las otras tablas le corresponde el tipo: “string”.
Código hotel / Código idioma: Para estos campos usaremos “bigInteger” porque al ser claves foráneas tiene que tener el mismo tipo de dato que el campo al que referencian, en este caso todas nuestras ids son tipo “bigIncrements” por tanto se debe usar un bigInt para no tengamos un error por conflictos con el tipo de dato. Ya creaste los campos que serán las fks pero aun no indicaste que sean fks, para esto necesitaremos tres métodos para que se guarden como tales en tu base de datos, “foreign” al que le pasamos como parámetro el nombre del campo, “references” con el nombre del campo al que estás referenciando y “on” con el nombre de la tabla dueña del campo que estas referenciando.
Tabla Huéspedes
Id: Laravel recomienda el uso de “bigIncrements” para los ids, básicamente porque representa un tipo entero (bigInt) y es autoincremental, característica propia de las claves primarias.
Nombre / Apellido / Correo electrónico / Nacionalidad: Para datos tipo cadena (varchar) corresponde el método “string”.
Sexo / Tipo / Titular: Para datos tipo Char (enum) debes usar el método “enum” y proporsionar como segundo parametro una lista de que caracteres seran los unicos que se permitiran guardar en este campo. Por ejemplo “m” y “f” para masculino y femenino o simplemente 1 y 0.
Fecha nacimiento / Fecha expiración / Fecha expedición: Para campos tipo fecha (Date) se usa el método “Date”.
Código checkin / Tipo documento / Número documento: Para los dos primeros campos se usa “bigInteger” ya que al ser fks deben tener el mismo tipo de dato que el campo id que referencian, recuerda que debes especificar el tipo de dato y la regla de clave foránea como se ve en la captura a continuación.
Para poder ejecutar todas las migraciones que hayas creado tienes que usar el comando “php artisan migrate” pero antes asegúrate de haber configurado tu archivo .env con los datos necesarios para que no tengas errores en la ejecución.
php artisan migrate
Si haces cambios en tus archivos de migraciones y quieres que estos se vean reflejados en la base de datos, volver a ejecutar “php artisan migrate” no te será de ayuda, para que tus cambios se vean en la base de datos deberás usar el comando: “php artisan migrate:refresh” que básicamente borrara todas tus tablas y las volverá a crear, así los cambios que hayas hecho ya se verán reflejados.