Comparte en Facebook Twitter Google+

banner-modificando-migraciones

A medida que avanzamos en el desarrollo de una aplicación puede que las tablas o los campos creados en la base de datos ya no se adapten o que simplemente necesitamos hacer algunos cambios.  Sin embargo, para ese momento no es posible hacer rollback a las migraciones hechas, pues, por ejemplo, la aplicación ya está en producción. Por consiguiente, para modificar la base de datos debemos hacer uso de las migraciones, tal y como lo hicimos al crear las tablas, pero ahora para cambiarlas. Hoy vamos a ver cuáles opciones tenemos disponibles para ello.

Tomemos en cuenta que debemos tener el archivo de configuración .env creado y con los datos de conexión a la base de datos.

Vamos a crear una migración para una tabla llamada profiles:

y en los métodos up y down colocamos:

Creamos el modelo Profile, ejecutando por consola:

y añadimos lo siguiente a la clase creada en Profile.php ubicado en el directorio app:

Además, vamos a crear un model factory para agregar datos ficticios a nuestra tabla profiles, en el archivo ModelFactories.php que se encuentra en el directorio database/factories:

Si no conoces cómo trabajar con ellos puedes consultar: Model Factories en Laravel 5.1

Para ejecutar dicha migración hacemos por consola:

Con lo cual obtenemos:

tabla-profiles-antes-de-cambiar

Antes de hacer los cambios que queremos a una columna debemos agregar a nuestro composer.json una dependencia en la sección require:

y luego hacer composer update.

 

Doctrine es un ORM (Object Relational Mapper) que permite interactuar con la base de datos desde código de PHP, sin trabajar directamente con consultas de SQL, es decir, que está en la capa de abstracción de la base de datos.  Posee muchas características como la introspección de esquema de base de datos, gestión de esquema y abstracción PDO. Por lo que Doctrine DBAL  es la biblioteca usada por Laravel para determinar el actual estado de un columna o campo y crear las consultas SQL necesarias para hacer los ajustes especificados a dicha columna.

Esta dependencia es requerida según la documentación oficial de Laravel, si no la agregas puedes obtener errores como:

[Symfony\Component\Debug\Exception\FatalErrorException]

Class ‘Doctrine\DBAL\Driver\PDOMySql\Driver’ not found

Opciones a cambiar las migraciones

Ahora bien, los posibles cambios que les podemos hacer a la tabla profiles puede ser:

Renombrar la tabla

Eliminar la tabla

Agregar nuevos campos o columnas

Si estamos usando MySQL podemos agregar la columna después de una en específico, es decir:

Cambiar el tipo o los atributos de una columna

Renombrar a una columna

Eliminar una columna

Agregar una llave foranea

Eliminar una llave foranea

En este caso se concatena el nombre de la tabla a modificar, más el nombre de la columna y por último la cadena “_foreign”

Ejemplo de uso

Para nuestro caso vamos a hacer algunos cambios en nuestra tabla profiles: renombrar la columna contact a contact_person, agregar la columna website y address y eliminar la columna comments, creando en un solo archivo de migración:

Este comando crea un nuevo archivo que contiene los métodos up y down vacíos para nosotros agregar los cambios a realizar. Nuestro método up quedaría así:

y el método down debería revertir las operaciones realizadas con el método up; esto para cuando se haga migrate:rollback se puedan deshacer dichas operaciones, por tanto nuestro método down queda de esta manera:

Al ejecutar por consola:

Como resultado tendríamos lo siguiente:

tabla-profiles-despues-de-cambiar

Esto es todo, espero que sea de mucha ayuda. No olviden dejar sus comentarios y dudas; además de compartir en las redes sociales.

Material relacionado

Regístrate hoy en Styde y continua mejorando tus habilidades: ver planes.

Lección anterior Uso de caché en Laravel 5.1 Lección siguiente Cómo crear Helpers personalizados en Laravel