Migraciones en Laravel 5

Hoy aprenderemos a usar las migraciones en Laravel 5.

Con las migraciones lo que hacemos es versionar la base de datos de nuestro proyecto de forma que si nosotros hacemos una serie de cambios en la estructura de la base de datos, cuando un compañero se baje del repositorio nuestros cambios en el código del proyecto ejecutará las migraciones que nosotros le hemos generado y estas harán los cambios necesarios en la base de datos.

Esta es una forma muy cómoda, rápida y segura de trabajar ya que no tenemos que andar creando ficheros SQL, exportando bases de datos y pasándoselas a los compañeros, lo cual a veces nos hace perder bastante tiempo.

Esto no es necesario para trabajar con Laravel 5 pero si que es una práctica recomendable.

Crear migraciones

Para crear migraciones ejecutaremos el comando php artisan make:migration create_users_table desde la consola en la raíz del proyecto. Si queremos que automatica nos genere la estructura básica de la tabla con Schema Builder en la migración podemos usar la opción --table=nombre-de-la-tabla.

En mi caso crearé dos migraciones, una para la tabla películas y otra para la tabla cineastas.

php artisan make:migration create_cineastas_table --create=cineastas
php artisan make:migration create_peliculas_table --create=peliculas

Ahora veremos que nos ha generado dos ficheros de migración en el directorio database/migrations.

Crear estructura de las tablas con Schema Builder

Con Schema Builder podemos hacer cualquier tipo de operación con la estructura de tablas de la base de datos, pero en nuestro caso solamente crearemos estas dos tablas. La ventaja de usar esto en lugar de SQL crudo es que nos abstraemos del SGBD que usamos.

Una migración siempre tendrá dos «eventos» up y down.

Up para cuando se ejecuta y se hacen los cambios en la base de datos.

Down para cuando se ejecuta un rollback de la migración para volver a un estado anterior de la base de datos.

Migración de cineastas:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCineastasTable extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
                //Crear una tabla con Schema Builder
		Schema::create('cineastas', function(Blueprint $table)
		{
                       //Definimos las columnas
			$table->increments('id');
                        $table->string('nombre',255);
                        $table->integer('edad');
                        
			$table->timestamps();
		});
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::drop('cineastas');
	}

}

Migración de películas:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

class CreatePeliculasTable extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		Schema::create('peliculas', function(Blueprint $table)
		{
			$table->increments('id');
                        $table->string('titulo',255);              
                        $table->mediumText('descripcion');
                        $table->integer('anio');
                        
                        //Clave ajena
                        $table->integer('cineasta_id')->unsigned();
                        $table->foreign('cineasta_id')
                                ->references('id')->on('cineastas')
                                ->onDelete('cascade');
                        
			$table->timestamps();
		});

	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::drop('peliculas');
              
	}

}

Con esto ya tenemos las migraciones creadas y listas para usarse.

Lanzar migraciones

Ahora lanzamos el comando php artisan migrate

migraciones en laravel 5 php artisan migrate

Ahora Laravel nos ha creado estas tablas en la base de datos.

Nos ha creado la tabla migrations.
migraciones en laravel 5 tabla migrations

La de cineastas.
migraciones en laravel 5 tabla cineastas

Y la de películas.
migraciones en laravel 5 tabla peliculas

Revertir migraciones

Ahora si queremos echar para atrás estos cambios en la base de datos necesitaremos ejecutar los comandos de rollback. Si ejecutamos un rollback y volvemos a la base de datos veremos que estará igual que la habíamos dejado antes de la migración.

Revertir los cambios de la última operación de migración:

php artisan migrate:rollback

Revierte todas las migraciones

php artisan migrate:reset

Revierte todas y vuelve a lanzarlas

php artisan migrate:refresh
php artisan migrate:refresh --seed

Esto es todo lo que debemos saber para empezar a usar las migraciones en Laravel 5.

Más información:
http://laravel.com/docs/5.0/schema
http://laravel.com/docs/5.0/migrations

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post