Laravel Migrations: El “Control de Versiones” para tu Base de Datos
Desarrollo artisan, db, desarrollo, laravel, migrations, phpModificar la base de datos a mano desde phpMyAdmin es cosa del pasado. En este post, enseñaremos cómo usar las Migrations para que todo tu equipo tenga la misma estructura de datos sin errores.
En el desarrollo de software moderno, la gestión de la base de datos suele ser uno de los puntos más críticos y propensos a errores. Tradicionalmente, los desarrolladores compartían scripts SQL manualmente o realizaban cambios directamente en herramientas como phpMyAdmin, lo que inevitablemente conducía a inconsistencias entre entornos de desarrollo, pruebas y producción. Laravel soluciona este problema de raíz mediante las Migrations.
1. ¿Qué son las Migrations y por qué las necesitas?
Las Migrations son, esencialmente, un sistema de control de versiones para tu base de datos. En lugar de compartir volcados de SQL, defines la estructura de tus tablas utilizando código PHP.
- Adiós al caos manual: Ya no dependes de que cada desarrollador ejecute comandos SQL manualmente. Esto elimina el riesgo de que alguien olvide añadir una columna o cambiar un tipo de dato, manteniendo al equipo sincronizado.
- Tu base de datos con historial (tipo Git): Al ser archivos PHP, las migrations se guardan en tu repositorio de Git. Esto te permite ver quién cambió qué, cuándo se hizo y, lo más importante, permite que la base de datos evolucione junto con el código de la aplicación.
- Consistencia: Todos los entornos (local, staging, producción) tendrán exactamente la misma estructura.
- Colaboración: Compartir un cambio en la base de datos es tan sencillo como hacer un
git pull. - Seguridad: Ofrecen un mecanismo estandarizado para revertir cambios si algo sale mal durante un despliegue.
2. Tu Primer Paso: Creando una Migration
Laravel utiliza Artisan, su potente interfaz de línea de comandos, para gestionar casi todo el ciclo de vida de las migrations. Para generar una nueva, utilizamos el comando make:migration.
$ php artisan make:migration create_posts_table
Este comando genera un archivo en la ruta database/migrations. El nombre del archivo incluye una marca de tiempo, lo que permite a Laravel determinar el orden cronológico en el que deben ejecutarse los cambios.
3. Entendiendo una Migration: Métodos up() y down()
Cada clase de migration contiene dos métodos fundamentales que dictan el comportamiento del esquema:
up(): Contiene las instrucciones para aplicar los cambios (crear tablas, añadir columnas o índices).down(): Contiene la lógica inversa para revertir lo que hizo el métodoup().
PHP – CreatePostsTable.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id(); // Identificador único
$table->string('titulo'); // Columna VARCHAR
$table->text('contenido'); // Columna TEXT
$table->timestamps(); // Crea 'created_at' y 'updated_at'
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
};
4. Definiendo Columnas con el Schema Builder
El Schema Builder ofrece una sintaxis fluida y expresiva para definir tipos de datos:
Tipos Comunes
$table->id(): Clave primaria$table->string('nombre'): Varchar corto$table->text('descripcion'): Contenido largo$table->decimal('precio', 8, 2): Precisión$table->boolean('disponible'): Booleano
Modificadores
->nullable(): Permite nulos->default($valor): Valor inicial->unique(): Índice único->after('columna'): Posicionamiento
5. Ejecutando y Reversando tus Cambios
Una vez definidos tus archivos, procesa esos cambios en la base de datos real:
php artisan migrateAplica todos los cambios pendientes.
php artisan migrate:rollbackDeshace el último lote (batch) de cambios.
¡Peligro! migrate:fresh elimina físicamente todas las tablas. Nunca lo uses en producción.
6. Modificando Tablas Existentes
La regla de oro: Una vez que una migration ha sido subida a producción, nunca la edites. Crea una nueva migration para añadir cambios.
public function up(): void
{
Schema::table('products', function (Blueprint $table) {
$table->integer('stock')->default(0)->after('price');
});
}
7. ¡A la Práctica! Productos con Categorías
Ejemplo de relación de Llave Foránea robusta:
Schema::create('products', function (Blueprint $table) {
$table->id();
// Relación de Llave Foránea
$table->foreignId('category_id')
->constrained()
->cascadeOnDelete();
$table->string('name');
$table->decimal('price', 8, 2);
$table->timestamps();
});
Conclusión
Laravel Migrations transforma la gestión de bases de datos de una tarea tediosa en un proceso elegante y seguro. Al tratar tu esquema como código, ganas el poder de viajar en el tiempo y garantizar que todo tu equipo trabaje sobre la misma base sólida.
Referencias:
Share via: