Migraciones, Factories y Seeders: El Control de Versiones de tu Base de Datos

Inicio   /   Migraciones, Factories y Seeders: El Control de Versiones de tu Base de Datos

Blog Migraciones, Factories y Seeders: El Control de Versiones de tu Base de Datos


Migraciones, Factories y Seeders: El Control de Versiones de tu Base de Datos


No vuelvas a compartir un archivo .sql por WhatsApp. Domina el flujo profesional de datos en Laravel.


Uno de los mayores problemas en el desarrollo colaborativo es mantener la base de datos sincronizada entre todos los miembros del equipo. Laravel soluciona esto eliminando la necesidad de exportar e importar SQL manualmente, permitiéndote definir la estructura y los datos de prueba directamente en el código.

1. Migraciones: El ADN de tus tablas

Las migraciones son como un historial de cambios para tu base de datos. En lugar de crear tablas en phpMyAdmin, escribes una clase PHP que describe la tabla.

Creando una Migración

Usa Artisan para generar el archivo:

php artisan make:migration create_products_table

Definiendo la estructura

Dentro del archivo generado en database/migrations, definimos las columnas. Laravel ofrece métodos fluidos para cada tipo de dato:

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('products', function (Blueprint $table) {
            $table->id(); // Primary Key auto-incremental
            $table->string('name', 100); // VARCHAR(100)
            $table->text('description')->nullable(); // TEXT que acepta nulos
            $table->decimal('price', 8, 2); // DECIMAL(8,2)
            $table->foreignId('category_id')->constrained(); // Relación automática
            $table->timestamps(); // Crea created_at y updated_at
        });
    }

    public function down(): void {
        Schema::dropIfExists('products');
    }
};

Para aplicar estos cambios, solo ejecutas: php artisan migrate. Si te equivocas, puedes deshacer el último paso con php artisan migrate:rollback.

2. Model Factories: Plantillas de datos inteligentes

¿Necesitas 500 productos para probar la paginación? No los crees a mano. Los Factories utilizan la librería Faker para generar datos realistas (nombres, correos, textos, etc.).

Definición del Factory (database/factories/ProductFactory.php):

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;

class ProductFactory extends Factory {
    public function definition(): array {
        return [
            'name' => $this->faker->words(3, true),
            'description' => $this->faker->sentence(),
            'price' => $this->faker->randomFloat(2, 10, 500),
            'category_id' => \App\Models\Category::factory(), // Crea una categoría automáticamente
        ];
    }
}

3. Seeders: Sembrando la base de datos

El Seeder es el encargado de ejecutar los Factories o insertar datos maestros (como los roles de administrador o las categorías iniciales).

Uso en database/seeders/DatabaseSeeder.php:

public function run(): void {
    // Crear 10 categorías y para cada una, crear 5 productos
    \App\Models\Category::factory(10)
        ->hasProducts(5)
        ->create();

    // Crear un usuario específico para pruebas
    \App\Models\User::factory()->create([
        'name' => 'Admin Test',
        'email' => 'admin@example.com',
    ]);
}

4. El Comando Maestro

Cuando un compañero descarga tu proyecto, solo tiene que ejecutar un comando para tener la base de datos lista, con tablas y datos de prueba:

php artisan migrate:fresh --seed

Este comando borra todas las tablas, las crea de nuevo y ejecuta los seeders. ¡Cuidado en producción!

Tip de Oro: Usa siempre Migraciones Anónimas (las que vienen por defecto en versiones recientes de Laravel) para evitar conflictos de nombres de clases si tienes muchas migraciones similares.

Dominar este flujo te ahorrará horas de configuración manual. ¿Qué sigue? En la próxima entrada exploraremos los Controladores y Request Validation para asegurar que los datos que entran a tu sistema sean perfectos.

Tags: aprender, Laravel, php, sql, datos, migraciones,