Capítulo 2.2: Creación del modelo Planet
Tiempo de estudio: 45 minutos
1. El modelo en Laravel: Planos de un objeto espacial
En la arquitectura MVC (Modelo-Vista-Controlador), el modelo es:
- 📦 Contenedor de datos (parámetros de planetas)
- 🔌 Interfaz de trabajo con la base de datos
- 🛡️ Centro de la lógica de negocio de la aplicación
💡 Analogía espacial: El modelo
Planet
= Planos de un planeta en el ordenador del Centro de Control de Misión. Con él se puede:
- Crear un nuevo planeta en el catálogo (
INSERT
)- Obtener datos sobre Marte (
SELECT
)- Actualizar información sobre la atmósfera (
UPDATE
)
2. Creación del modelo y la migración
Laravel utiliza Artisan CLI — su "panel de control" del proyecto.
Paso 1: Generación del modelo con migración
Lo que se creó:
app/
└── Models/
└── Planet.php ← Modelo
database/
└── migrations/
└── 2025_08_04_000000_create_planets_table.php ← Migración
Banderas de Artisan:
-m
→ Crear migración-c
→ Crear controlador-r
→ Controlador de recursos
💡 Consejo profesional: Estas banderas se pueden combinar para una máxima eficiencia. El comando
php artisan make:model Planet -mcr
creará inmediatamente el modelo, la migración y el controlador de recursos para gestionar este modelo. Esto ahorra mucho tiempo.
3. Configuración del modelo Planet
Abra app/Models/Planet.php
:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Planet extends Model
{
// Nombre de la tabla (por defecto: 'planets')
// Laravel asume automáticamente que el nombre de la tabla es la forma plural del nombre del modelo en snake_case (Planet -> planets).
//Por lo tanto, esta propiedad no es obligatoria aquí, pero es útil para mayor claridad.
protected $table = 'planets';
// Campos permitidos para asignación masiva
protected $fillable = [
'name',
'description',
'size_km',
'solar_system',
'image_url'
];
// Tipos de datos para conversión automática
protected $casts = [
'size_km' => 'integer'
];
}
Explicación de las propiedades:
Propiedad | Valor | Ejemplo de datos |
---|---|---|
$table |
Nombre de la tabla en la BD | planets |
$fillable |
Campos para asignación masiva | name , size_km |
$casts |
Conversión automática de tipos | size_km: integer |
4. Diseño de la tabla de planetas
Antes de editar la migración, definamos la estructura del "planeta":
Campo | Tipo de datos | Descripción | Valor de ejemplo |
---|---|---|---|
id |
BIGINT (PK) | ID único | 1 |
name |
VARCHAR(255) | Nombre del planeta | "Marte" |
description |
TEXT | Descripción | "Planeta rojo..." |
size_km |
INTEGER | Diámetro en km | 6779 |
solar_system |
VARCHAR(100) | Sistema Solar | "Sistema Solar" |
image_url |
VARCHAR(2048) | URL de la foto (puede ser nulo) | "https://..." |
created_at |
TIMESTAMP | Fecha de creación | 2025-08-04 12:00:00 |
updated_at |
TIMESTAMP | Fecha de actualización | 2025-08-05 09:30:00 |
5. Edición de la migración
Abra el archivo de migración en database/migrations/..._create_planets_table.php
:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePlanetsTable extends Migration
{
public function up()
{
Schema::create('planets', function (Blueprint $table) {
$table->id(); // BIGINT autoincremental
$table->string('name')->unique();
$table->text('description');
$table->integer('size_km');
$table->string('solar_system', 100);
$table->string('image_url', 2048)->nullable();
$table->timestamps(); // created_at + updated_at
});
}
public function down()
{
Schema::dropIfExists('planets');
}
}
Puntos clave:
->unique()
→ Garantiza la unicidad de los nombres->nullable()
→ El campo puede estar vacíotimestamps()
→ Gestión automática de fechas
6. Ejecución de la migración (preliminar)
Aunque la ejecución se realizará en el capítulo 2.3, veamos cómo se verá:
Salida esperada:
Migrating: 2025_08_04_000000_create_planets_table
Migrated: 2025_08_04_000000_create_planets_table (32.15ms)
Verificación en pgAdmin 4:
- Abra la base de datos
space_api
→ Schemas → Tables - Debería aparecer la tabla
planets
con sus campos
7. Enfoque alternativo: Generadores de código
Para acelerar el desarrollo se pueden utilizar paquetes:
- Laravel Blueprint - crea modelos/migraciones a partir de una descripción YAML
- InfyOm Laravel Generator - generador basado en el esquema de la BD
Ejemplo de Blueprint:
models:
Planet:
name: string:255
description: text
size_km: integer
solar_system: string:100
image_url: string:2048? # El signo '?' indica que el campo puede ser nulo
Cuestionario para consolidación
🚀 Resumen del capítulo: ¡Has creado un "gemelo digital" del planeta! Ahora tu proyecto tiene:
- 🪐 Modelo
Planet
con lógica de negocio - 📊 Migración para la tabla
planets
en PostgreSQL - 🛠️ Propiedades del modelo configuradas (
fillable
,casts
)
¡Prepara la base de datos! En el siguiente capítulo ejecutaremos la migración y poblaremos el universo con los primeros planetas.
📌 Comprobación:
Asegúrate de que los archivos
Planet.php
y..._create_planets_table.php
hayan sido creados en los directorios correctos.⚠️ Si Artisan da errores:
- Verifica que estés en la carpeta del proyecto
- Asegúrate de que las dependencias estén instaladas (
composer install
)- Para Windows: añade PHP y Composer al PATH