Contenido del curso

Manos a la obra con nuestro proyecto

Modelos y factories en Laravel con datos falsos

Resumen

Crear modelos en Laravel es el paso que conecta tu base de datos con la lógica de tu aplicación. Si ya hiciste la migración de una tabla, ahora necesitas el modelo para manejarla, y de paso aprovechar los factories y seeders para llenarla con datos de prueba. Esto te sirve si estás aprendiendo Laravel y quieres tener una base sólida para construir tu primer CRUD.

¿Qué diferencia hay entre una migración y un modelo en Laravel?

Una migración crea la estructura inicial de la tabla en la base de datos. El modelo, en cambio, es el archivo PHP que representa esa tabla dentro de Laravel y te permite hacer consultas, insertar registros y administrar la información desde el código.

Los modelos viven en la carpeta app/Models, donde Laravel ya incluye uno de ejemplo. Para administrar la tabla que creaste antes, necesitas generar uno nuevo con su propia configuración.

¿Qué es un modelo en Laravel? Es un archivo que representa una tabla de la base de datos y permite consultarla, modificarla y relacionarla con otras tablas usando código PHP en lugar de SQL directo.

¿Cómo generar un modelo con factory y controlador desde Artisan?

Laravel ofrece comandos en consola para acelerar la creación de archivos. Si ejecutas php artisan make:model --help puedes ver todas las opciones disponibles, incluyendo la bandera --all que crea migración, seeder, factory, controlador y políticas al mismo tiempo [02:00].

Para este caso, basta con generar el modelo junto con su factory y su controlador usando la bandera -fc:

  • f crea el factory asociado al modelo.
  • c crea el controlador para manejar las peticiones.
  • El modelo queda listo en app/Models sin configuración adicional.

El controlador lo dejas en pausa por ahora. El foco está en el modelo y el factory, que es donde defines los datos falsos que poblarán la tabla.

¿Cómo definir datos falsos dentro del factory?

El factory es el archivo que describe cómo se ven los datos de prueba. Dentro del método de definición usas la librería Faker que Laravel incluye por defecto.

Para una tabla de publicaciones puedes configurar tres campos así:

  • Título: una oración falsa con sentence().
  • URL amigable: derivada del título.
  • Body: un texto largo de 2200 caracteres con text(2200).

El detalle interesante está en la URL amigable. En lugar de dejar otra oración random, la conviertes a formato slug importando la clase \Illuminate\Support\Str y aplicando Str::slug($title) [04:30]. Así la URL queda coherente con el título de cada publicación.

¿Cómo poblar la base de datos con seeders y factories?

El seeder es el archivo que ejecuta la siembra de datos. Por defecto trae una línea comentada que crea un usuario; al descomentarla y duplicar la lógica para el modelo Post, puedes generar 80 registros de publicaciones de un solo golpe.

La estructura queda así:

  1. Crear un único usuario con el factory de User.
  2. Crear 80 publicaciones con el factory de Post.
  3. Ejecutar todo desde la consola con un comando.

El comando que une migraciones y seeders en un solo paso es:

php artisan migrate:refresh --seed

Este comando elimina las tablas, vuelve a correr todas las migraciones desde cero y luego ejecuta los seeders. Al revisar la base de datos verás 80 registros en la tabla de contenido y uno solo en la tabla de usuarios [05:50].

¿Para qué sirve migrate:refresh seed? Reinicia toda la base de datos: borra las tablas, vuelve a crearlas con las migraciones y las llena con los datos definidos en los seeders. Es ideal en desarrollo cuando quieres empezar limpio.

¿Por qué necesitas el modelo aunque no lo configures?

Aunque en el archivo del modelo no escribas ninguna línea adicional, su sola existencia es lo que permite que el factory y el seeder funcionen. El factory apunta al modelo, el seeder invoca al factory, y el modelo le dice a Laravel a qué tabla pertenecen esos datos.

El ciclo completo se entiende mejor en orden:

  • La migración crea la tabla una sola vez.
  • El modelo representa esa tabla en el código.
  • El factory define cómo lucen los datos falsos.
  • El seeder usa el factory para insertar registros masivos.

Con esa cadena funcionando, ya tienes 80 publicaciones listas y un usuario para asociarlas. Tu reto ahora es replicar exactamente eso en tu proyecto: 80 publicaciones y un único usuario, porque sin esa data no podrás avanzar con los siguientes ejercicios del CRUD.

¿Te animas a contar en los comentarios qué otros campos agregarías al factory de publicaciones?