Cómo crear migraciones en Laravel
Anuncio:
En esta ocasión vamos a ver cómo crear migraciones en Laravel para crear y modificar tablas de MySQL. Como siempre digo, es bueno hacer uso de la documentación. Lo primero que debemos hacer es abrir la terminal y posicionarnos en el directorio de nuestro proyecto Laravel. Una vez aquí, vamos a ver la documentación de las migraciones en Laravel con:
php artisan make:migration --help
Y podremos ver las diferentes opciones que podemos usar. Nos vamos a centrar en dos, la opción create para crear una tabla y la opción table que es para modificar tablas. Bien, vamos a hacer una migración para crear una tabla. Esto lo hacemos de la siguiente forma:
php artisan make:migration create_alumno_table --create alumno
Como puedes ver, make:migreation recibe tres parámetros, el primero es el nombre de la migración, create_alumno_table, el segundo es el tipo de migración, create, para crear una nueva tabla, y el último parámetro es el nombre de la tabla. Como resultado, creará un una clase PHP en nuestro proyecto, cuyo nombre será la fecha de creación, concatenado con el nombre de la migración que hemos indicado. Este archivo lo creará en el directorio database/migrations y será como el siguiente archivo:
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateAlumnoTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('alumno', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('alumno');
}
}
Como puedes ver, tiene dos métodos, up y down. El primero es para crear la tabla y el segundo para eliminarla. Éste último es necesario para cuando queremos hacer rollback en nuestra base de datos. Bien, lo que nos interesa ahora mismo, es el método up donde vemos que tenemos el Shema create, que es el tipo de migración, el nombre de la tabla, alumno, dentro está creando un atributo id auto incremental y con el método timestamps() lo que hace es que crea dos atributos de tipo fecha, created_at y updated_at, que Laravel por convención introduce en todas las tablas.
Nosotros podemos añadir aquí tantos atributos como queramos, por ejemplo vamos a modificar el método up para añadir nombre y apellidos:
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('alumno', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
$table->string('nombres'); // Nuevo atributo
$table->apellidos('apellidos'); // Nuevo atributo
});
}
De esta forma, podemos agregar tantos atributos como queramos a nuestra tabla. Una vez que hemos terminado, tenemos que ejecutar la migración que acabamos de crear. Para ello, volvemos a la terminal y lo hacemos con:
php artisan migrate
Este comando, ejecuta todas las migraciones pendientes de ejecutar. Como resultado, podremos ver en nuestra base de datos, que se ha creado la tabla alumno.
Vamos a ver ahora cómo editar una tabla, para ello debemos hacer otra migración:
php artisan make:migration add_created_at_index_to_alumno_table --table alumno
El uso es prácticamente igual que en el caso anterior. Le pasamos tres parámetros a la migración, que son: el nombre de la migración, el tipo y el nombre de la tabla que vamos a modificar. Esto nos va a crear una nueva migración en el directorio database/migrations del tipo:
class AddCreateAtIndexToAlumnoTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('alumno', function (Blueprint $table) {
//
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('alumno', function (Blueprint $table) {
//
});
}
}
Ahora, el tipo de Schema seleccionado es table y no create, puesto que la tabla ya existe. Hagamos la modificación agregando un índice a nuestra tabla:
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('alumno', function (Blueprint $table) {
$table->index('created_at'); // Creación del índice
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('alumno', function (Blueprint $table) {
$table->dropIndex('alumno_created_at_index'); // Eliminar el índice
});
}
Por convención, el indice toma el nombre de la tabla_columna_index por eso el nombre que le he indicado a la hora de borrarlo. Una vez más para ejecutar esta migración, volvemos a la terminal:
php artisan migrate
Y como resultado podremos ver en nuestra base de datos el nuevo índice.
Ahora, vamos a hacer un rollback a nuestra base de datos. Y aquí la importación de implementar los métodos down de las migraciones. Para deshacer la última migración, haremos un:
php artisan migrate:rollback
También puedo hacer rollback de todo con:
php artisan migrate:reset
Y además también se puede hacer un rollback de todo y volverlo a ejecutar con:
php artisan migrate:refresh
Con esto, hemos visto cómo crear migraciones en Laravel para crear y modificar tablas, además de hacer rollbacks.
Espero que te haya sido de utilidad!