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

  1. Crear un modelo Movie (Película) en Laravel

  2. Crear y configurar una migración para la tabla movies

  3. Crear un seeder para poblar la tabla con datos de prueba

  4. Ejecutar las migraciones y seeders

  5. 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:

bash
cd /ruta/de/tu/proyecto
cd api  # Si tu instalación de Laravel está en esta carpeta

1.2 Crear el modelo con migración

Ejecutamos el siguiente comando en la terminal:

bash
php artisan make:model Movie --migration

¿Qué hace este comando?

  • Crea un modelo llamado Movie en app/Models/Movie.php

  • Crea una migración en database/migrations/ para la tabla movies


🗄️ 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
<?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

CampoTipoDescripción
idbigIncrementsIdentificador único autoincremental
titlestringTítulo de la película (255 caracteres)
synopsistextSinopsis de la película (texto largo)
yearintegerAño de lanzamiento
coverstringURL 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
<?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:

bash
php artisan migrate

4.2 Verificar en MySQL

Conectamos a MySQL y verificamos la estructura:

sql
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

bash
php artisan make:seeder MoviesTableSeeder

5.2 Configurar el seeder

Editamos database/seeders/MoviesTableSeeder.php:

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
<?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

bash
php artisan db:seed --class=MoviesTableSeeder

6.2 Ejecutar todos los seeders

bash
php artisan db:seed

✅ Paso 7: Verificar los Datos

7.1 Consultar en MySQL

sql
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: Movie

  • Nombres de tablas en plural: movies

  • Nombres de migraciones descriptivos

3. Uso de migraciones

  • Versionan la estructura de la base de datos

  • Permiten deshacer cambios con php artisan migrate:rollback

  • Facilitan trabajo en equipo


🔧 Solución de Problemas Comunes

Error: "Class not found"

Solución: Verificar namespaces y ejecutar:

bash
composer dump-autoload

Error: "Table already exists"

Solución:

bash
php artisan migrate:fresh  # Elimina y recrea todas las tablas

Error: "SQL syntax error"

Solución: Verificar sintaxis en la migración y tipo de datos.


📚 Resumen

En este tutorial hemos:

  1. ✅ Creado un modelo Movie con migración

  2. ✅ Definido la estructura de la tabla movies

  3. ✅ Configurado el modelo con $fillable

  4. ✅ Creado un seeder con datos de prueba

  5. ✅ Ejecutado migraciones y seeders

  6. ✅ 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

text
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

Entradas más populares de este blog

Axios para Principiantes - Guía Paso a Paso

15-Tutorial: Crear Película en React con useState

Tutorial de React para Principiantes