En esta lección aprenderás cómo puedes modificar tablas ya existentes a través del sistema de migraciones de Laravel de dos formas: modificando una migración ya existente o creando una migración nueva. Para lograr esto utilizaremos varios comandos de Artisan como migrate:refresh, migrate:reset y migrate:rollback y por supuesto crearemos la nueva migración con el comando make:migration.

Repositorio

Ver el código de esta lección en GitHub

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Notas

Modificar una tabla

Para agregar una columna a una tabla, modificamos la migración ya existente. En nuestro caso añadimos un campo profession con un limite de 100 caracteres a la tabla users:

Encadenando nullable() indicamos que la columna puede contener valores nulos, es decir que su valor es opcional.

Comando reset

El comando de Artisan migrate:reset va a hacer un retroceso (roll back) de las migraciones ejecutadas previamente. En nuestro ejemplo va a eliminar las tablas users y password_resets.

Luego de ejecutar este comando, podemos ejecutar el comando php artisan migrate para volver a crear las tablas.

Modificar un campo ya existente

Para modificar un campo ya existente, por ejemplo el limite de caracteres del campo profession, agregamos el nuevo valor en la migración:

Para que estos cambios tengan efecto debemos ejecutar el comando de Artisan migrate:refresh.

Comando migrate:refresh

El comando migrate:refresh primero va a ejecutar un reset de todas las migraciones (llamando al método down()) y luego volverá a ejecutar las migraciones (llamando al método up()):

Modificar migraciones

Al realizar una modificación en la migración original tenemos el problema de que los comandos reset y refresh eliminaran el contenido de las tablas en la base de datos. Para evitar esto podemos (utilizando el comando make:migration) crear una nueva migración y agregar desde ahí las modificaciones que necesitamos:

Es una buena practica que el nombre de la migración sea descriptivo y haga referencia a lo que vamos a hacer. En este caso add_profession_to_users indica que queremos agregar el campo profession a la tabla users.

Dentro del método up() de la migración en lugar de usar el método create del facade Schema utilizaremos table y pasaremos como primer argumento el nombre de la tabla que queremos modificar:

Dentro de la función indicamos el campo que queremos agregar.

En el método down() especificamos la acción inversa, en este caso eliminar la columna que agregamos en el método up():

Con el método dropColumn eliminamos de la tabla la columna especificada como argumento.

Indicar la posición de una columna

Al modificar una migración utilizando Schema::table y agregar una columna, esta se va añadir al final de la tabla. Podemos lograr que la columna se cree en la posición que indiquemos utilizando el método after:

En este caso indicamos que queremos agregar la columna profession después del campo password.

Comando rollback

Utilizando el camando de Artisan migrate:rollback Laravel regresará el último lote de migraciones ejecutado:

Únete a la discusión

Regístrate en Styde y obtén una invitación a nuestro Slack.

Lección anterior Introducción a las bases de datos y migraciones con Laravel Lección siguiente Crear y asociar tablas usando las migraciones de Laravel (con claves foráneas)