¿QUÉ SON LAS MIGRACIONES EN LARAVEL Y CÓMO USARLAS?

Las migraciones en Laravel son el mecanismo que te permite definir, versionar y modificar la estructura de la base de datos usando código, en lugar de hacerlo manualmente con SQL. Funcionan como un control de versiones para tu esquema de base de datos. Las migraciones en Laravel sirven para mantener sincronizada la base de datos, facilitar despliegues en producción, revertir cambios fácilmente y documentar la evolución del esquema de base de datos. No hay que editar migraciones ya ejecutadas en producción. Usar nombres claros y descriptivos. Mantener migraciones pequeñas y específicas. Definir siempre el método down() y usa migraciones solo para estructura, no datos.

¿Qué es una migración?

Una migración es una clase PHP que describe cambios en la base de datos, como:
  • Crear tablas.
  • Modificar columnas.
  • Agregar índices o foreign keys.
  • Eliminar estructuras.
Laravel se encarga de ejecutar estos cambios de forma ordenada y reversible.

Crear una migración

  • Las migraciones de Laravel hay que crearlos en el directorio "database/migrations/". El nombre del fichero debe incluir el nombre de la tabla.
  • El archivo generado tiene esta estructura básica (en Laravel 11.x y superiores, usa clases anónimas):

    //database/migrations/create_users_table.php
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    
    return new class extends Migration
    {
    /**
     * Run the migrations.
     */
    public function up()
    {
    Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamps();
    });
    }
    
    public function down()
    {
    Schema::dropIfExists('users');
    }
    };
    
    • El método up() → Define qué cambios aplicar (crear tabla, añadir columnas, índices, foreign keys…).
    • down() → Define cómo revertir esos cambios (normalmente dropIfExists o eliminar columnas).
  • Para hacer efectiva la migración hay que ejecutar el siguiente comando:

    php artisan make:migration create_users_table
    
  • Para revertir la última migración hay que ejecutar el siguiente comando:

    php artisan migrate:rollback
    
  • Para revertir todas las migraciones hay que ejecutar el siguiente comando:

    php artisan migrate:reset
    
  • Para añadir un campo a una table hay que ejecutar el siguiente comando:

    php artisan make:migration add_phone_to_users_table
    
    Donde " add_phone_to_users_table" indica añadir el campo "phone" en la tabla "users_table". Donde se creará el fichero "fechaHoraEjecucion_add_phone_to_users_table.php" ":

    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    
    return new class extends Migration
    {
    /**
     * Run the migrations.
     */
    public function up(): void
    {
    Schema::table('users', function (Blueprint $table) {
      // ← Aquí es donde va tu código
      // Laravel pone esto vacío o con un comentario
    });
    }
    
    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
    Schema::table('users', function (Blueprint $table) {
      $table->dropColumn('phone');
    });
    }
    };