Capítulo 2.3: Migraciones de la base de datos
Tiempo de estudio: 50 minutos
1. Migraciones: Construcción de una estación espacial
Las migraciones en Laravel son un sistema de control de versiones para tu base de datos.
Imagina que estás:
- 🏗️ Creando el plano de una estación (migración
create_planets_table
) - 🚀 Desplegando módulos (ejecución de migraciones)
- 🔧 Modernizando la estructura (nuevas migraciones)
- ⏪ Puedes revertir a una versión anterior (rollback)
💡 Importante: Las migraciones permiten que el equipo trabaje de forma coordinada, ¡como ingenieros en diferentes continentes construyendo la ISS!
2. Ejecución de migraciones
Después de crear la migración en el capítulo 2.2, ejecuta:
Salida en la terminal:
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (25.12ms)
Migrating: 2014_10_12_100000_create_password_reset_tokens_table
Migrated: 2014_10_12_100000_create_password_reset_tokens_table (18.07ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (21.33ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated: 2019_12_14_000001_create_personal_access_tokens_table (30.45ms)
Migrating: 2025_08_04_000000_create_planets_table
Migrated: 2025_08_04_000000_create_planets_table (15.67ms) # ¡Tu tabla!
Verificación en pgAdmin 4:
- Abre la base de datos
space_api
→ Schemas → Tables - Asegúrate de que aparezcan: -
planets
-users
-password_reset_tokens
3. Revertir migraciones: Retorno de emergencia
Si necesitas corregir la estructura:
php artisan migrate:fresh
— ¡el comando más útil en desarrollo! Elimina todas las tablas y vuelve a ejecutar todas las migraciones.php artisan migrate:fresh --seed
— hace lo mismo quefresh
, pero después de las migraciones, ejecuta inmediatamente los seeders. Este es un comando para la "recreación" completa de la base de datos desde cero.
Escenario de uso:
# Paso 1: Nos dimos cuenta de que hay un error en la migración. Recreamos completamente la base de datos.
php artisan migrate:fresh
# Paso 2: Editamos la migración
# Paso 3: Volvemos a crear la base de datos con la migración ya corregida.
php artisan migrate:fresh
4. Adición de nuevos campos: Modernización de la estación
Ejemplo: Añadiremos el campo is_habitable
(¿es habitable el planeta?).
Paso 1: Creamos una nueva migración
Paso 2: Editamos el archivo database/migrations/..._add_is_habitable_to_planets_table.php
<?php
public function up()
{
Schema::table('planets', function (Blueprint $table) {
$table->boolean('is_habitable')
->default(false);
});
}
public function down()
{
Schema::table('planets', function (Blueprint $table) {
$table->dropColumn('is_habitable');
});
}
Paso 3: Ejecutamos la actualización
5. Rellenar la base de datos: Los primeros planetas
Creamos un seeder — un script para generar datos de prueba.
Paso 1: Generación del seeder
Paso 2: Editamos database/seeders/PlanetSeeder.php
<?php
use App\Models\Planet; // ¡Importamos el modelo de planeta - Sin esto, obtendrás un error!
class PlanetSeeder extends Seeder
{
public function run()
{
Planet::create([
'name' => 'Tierra',
'description' => 'Planeta azul con vida diversa',
'size_km' => 12742,
'solar_system' => 'Sistema Solar',
'image_url' => 'https://example.com/earth.jpg',
'is_habitable' => true
]);
Planet::create([
'name' => 'Marte',
'description' => 'Planeta rojo, objetivo de futuras colonizaciones',
'size_km' => 6779,
'solar_system' => 'Sistema Solar',
'is_habitable' => false
]);
}
}
Paso 3: Registramos el seeder en database/seeders/DatabaseSeeder.php
Paso 4: Ejecución del relleno
6. Trabajar con PostgreSQL: Especificidades
Características del tipo de datos:
Característica | PostgreSQL | MySQL | Comentario de Laravel |
---|---|---|---|
Tipo lógico | boolean (verdadero true /false ) |
tinyint(1) (almacena 0 /1 ) |
$table->boolean('...') funciona para ambos |
JSON | jsonb (binario, indexable) |
json (de texto) |
$table->jsonb('...') - muy potente en PG |
Arrays | text[] , integer[] (arrays nativos) |
No (emulado a través de JSON o cadenas) | $table->array('...') (exclusivo para PG) |
Orden de columnas | No se puede controlar (after() no funciona) |
Se puede controlar (after() ) |
Laravel lo abstrae, pero es necesario conocer la limitación |
Ejemplo de creación de índice:
7. Verificación de datos en psql
Puedes usar cualquier cliente gráfico y seleccionar space_api
para visualizar los datos.
Al usar la consola:
psql -U postgres -d space_api
# La terminal puede solicitar la contraseña que configuraste al instalar PostgreSQL.
En cualquier caso, la salida debería ser la siguiente:
id | name | description | size_km | solar_system | image_url | is_habitable |
---|---|---|---|---|---|---|
1 | Tierra | Planeta azul con vida diversa | 12742 | Sistema Solar | ... | true |
2 | Marte | Planeta rojo, objetivo de colonizaciones | 6779 | Sistema Solar | null | false |
Cuestionario de repaso
🚀 Resumen del capítulo:
Has dominado la "construcción de infraestructura espacial":
- ✅ Creaste y lanzaste migraciones
- 🔧 Modernizaste la estructura de la tabla
- 🌍 Llenaste la BD con los primeros planetas
- ⚙️ Aprendiste a trabajar con PostgreSQL
¡Tu universo ha adquirido sus primeros mundos! Ahora puedes pasar a la creación de interfaces API para la gestión de planetas.
📌 Verificación:
- Ejecuta
php artisan tinker
- Ejecuta
App\Models\Planet::all()
- Asegúrate de ver la Tierra y Marte