5-1-Setup de MySQL y Creación de Modelos en Laravel
Introducción
En el vídeo anterior creamos una nueva base de datos en MySQL y realizamos configuraciones básicas. En este tutorial, aprenderemos a crear modelos y migraciones en Laravel, específicamente para un proyecto de películas.
🎯 Objetivos del Tutorial
Crear un modelo Movie (Película) en Laravel
Crear y configurar una migración para la tabla movies
Crear un seeder para poblar la tabla con datos de prueba
Ejecutar las migraciones y seeders
Verificar los datos en MySQL
🚀 Paso 1: Crear el Modelo y Migración
1.1 Navegar al directorio del proyecto
Primero, debemos ubicarnos en la carpeta correcta del proyecto:
cd /ruta/de/tu/proyecto
cd api # Si tu instalación de Laravel está en esta carpeta1.2 Crear el modelo con migración
Ejecutamos el siguiente comando en la terminal:
php artisan make:model Movie --migration¿Qué hace este comando?
Crea un modelo llamado
Movieenapp/Models/Movie.phpCrea una migración en
database/migrations/para la tablamovies
🗄️ Paso 2: Configurar la Migración
2.1 Abrir el archivo de migración
Localizamos el archivo recién creado en:database/migrations/[timestamp]_create_movies_table.php
2.2 Editar la migración
Modificamos el método up() para definir la estructura de nuestra tabla:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMoviesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('movies', function (Blueprint $table) {
$table->id(); // ID automático
$table->string('title'); // Título de la película
$table->text('synopsis'); // Sinopsis (texto largo)
$table->integer('year'); // Año de la película
$table->string('cover'); // Portada/Imagen
$table->timestamps(); // created_at y updated_at
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('movies');
}
}2.3 Explicación de los campos
| Campo | Tipo | Descripción |
|---|---|---|
id | bigIncrements | Identificador único autoincremental |
title | string | Título de la película (255 caracteres) |
synopsis | text | Sinopsis de la película (texto largo) |
year | integer | Año de lanzamiento |
cover | string | URL o ruta de la imagen de portada |
timestamps | - | Campos created_at y updated_at automáticos |
📝 Paso 3: Configurar el Modelo Movie
3.1 Abrir el modelo
Editamos el archivo app/Models/Movie.php:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Movie extends Model
{
use HasFactory;
/**
* Los atributos que son asignables en masa.
*
* @var array<int, string>
*/
protected $fillable = [
'title',
'synopsis',
'year',
'cover'
];
}Importancia del $fillable:
Define qué campos pueden ser llenados al crear registros
Es una medida de seguridad contra asignación masiva
🗄️ Paso 4: Ejecutar la Migración
4.1 Correr la migración
Desde la terminal, ejecutamos:
php artisan migrate4.2 Verificar en MySQL
Conectamos a MySQL y verificamos la estructura:
mysql -u root -p # Conectar a MySQL
use nombre_de_tu_base_de_datos; # Seleccionar la base de datos
show tables; # Ver todas las tablas
describe movies; # Ver estructura de la tabla movies🌱 Paso 5: Crear un Seeder
5.1 Generar el seeder
php artisan make:seeder MoviesTableSeeder5.2 Configurar el seeder
Editamos database/seeders/MoviesTableSeeder.php:
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\Movie; // Importar el modelo
class MoviesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// Limpiar la tabla antes de insertar
Movie::truncate();
// Crear instancia de Faker
$faker = \Faker\Factory::create();
// Crear 10 películas de prueba
for ($i = 0; $i < 10; $i++) {
Movie::create([
'title' => $faker->sentence(3),
'synopsis' => $faker->paragraph(),
'year' => $faker->numberBetween(1990, 2024),
'cover' => $faker->imageUrl(640, 480, 'movies', true)
]);
}
}
}5.3 Registrar el seeder
Editamos database/seeders/DatabaseSeeder.php:
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call([
MoviesTableSeeder::class, // Añadir esta línea
]);
}
}🚀 Paso 6: Ejecutar el Seeder
6.1 Ejecutar seeder específico
php artisan db:seed --class=MoviesTableSeeder6.2 Ejecutar todos los seeders
php artisan db:seed✅ Paso 7: Verificar los Datos
7.1 Consultar en MySQL
SELECT * FROM movies;7.2 Resultado esperado
Deberías ver 10 registros con datos aleatorios generados por Faker.
🎯 Buenas Prácticas
1. Usar inglés en el código
Facilita colaboración internacional
Mejora oportunidades laborales
Documentación más accesible
2. Seguir convenciones de Laravel
Nombres de modelos en singular:
MovieNombres de tablas en plural:
moviesNombres de migraciones descriptivos
3. Uso de migraciones
Versionan la estructura de la base de datos
Permiten deshacer cambios con
php artisan migrate:rollbackFacilitan trabajo en equipo
🔧 Solución de Problemas Comunes
Error: "Class not found"
Solución: Verificar namespaces y ejecutar:
composer dump-autoloadError: "Table already exists"
Solución:
php artisan migrate:fresh # Elimina y recrea todas las tablasError: "SQL syntax error"
Solución: Verificar sintaxis en la migración y tipo de datos.
📚 Resumen
En este tutorial hemos:
✅ Creado un modelo
Moviecon migración✅ Definido la estructura de la tabla
movies✅ Configurado el modelo con
$fillable✅ Creado un seeder con datos de prueba
✅ Ejecutado migraciones y seeders
✅ Verificado los datos en MySQL
🎥 Próximos Pasos
En el siguiente vídeo:
Crearemos nuestro primer endpoint API REST
Implementaremos operaciones CRUD
Aprenderemos a usar Eloquent ORM
Retornaremos datos en formato JSON
📁 Estructura de Archivos Resultante
tu-proyecto/
├── app/
│ └── Models/
│ └── Movie.php
├── database/
│ ├── migrations/
│ │ └── [timestamp]_create_movies_table.php
│ └── seeders/
│ ├── DatabaseSeeder.php
│ └── MoviesTableSeeder.php
└── .env # Configuración de base de datos¡Felicidades! 🎉 Has configurado exitosamente MySQL con Laravel y creado tu primer modelo con datos de prueba
Comentarios
Publicar un comentario