Configuración de Preguntas en Laravel: Migraciones y Factory

Clase 7 de 26Curso de Interfaces Dinámicas con Laravel Livewire

Contenido del curso

Configuración base

Resumen

Preparar una base de datos con datos de prueba realistas es fundamental para validar cualquier sistema antes de ponerlo en producción. Aquí se aborda cómo crear el modelo Thread (que representa una pregunta), configurar su migración con relaciones foráneas, generar datos falsos con un factory y poblar la base de datos mediante un seeder.

¿Cómo se crea el modelo Thread con su migración y factory?

El punto de partida es ejecutar un solo comando en la terminal que genera tres archivos de golpe: el modelo, el factory y la migración [0:22].

bash php artisan make:model Thread -mf

  • Modelo: representa la entidad "hilo" o pregunta dentro del sistema.
  • Factory: permite generar datos falsos de forma automatizada.
  • Migración: define la estructura de la tabla en la base de datos.

Con estos tres archivos listos, el siguiente paso es configurar cada uno según las necesidades del proyecto.

¿Cómo se configura la migración con relaciones foráneas?

La migración es el primer archivo que se edita. Una pregunta debe pertenecer tanto a una categoría como a un usuario, por lo que se definen dos claves foráneas [0:48].

php $table->foreignId('category_id') ->references('id') ->on('categories') ->onDelete('cascade');

$table->foreignId('user_id') ->references('id') ->on('users') ->onDelete('cascade');

$table->string('title'); $table->text('body');

  • category_id: referencia al campo id de la tabla categories con efecto cascade en borrado, lo que significa que al eliminar una categoría se eliminan automáticamente sus preguntas asociadas.
  • user_id: aplica la misma lógica hacia la tabla users.
  • title: almacena el título de la pregunta como cadena de texto.
  • body: guarda el contenido completo de la pregunta en formato text.

El on delete cascade es una configuración clave para mantener la integridad referencial de la base de datos sin dejar registros huérfanos.

¿Cómo se generan 200 preguntas de prueba con factory y seeder?

Dentro del factory se define la estructura de datos falsos. Nótese que el category_id no se establece aquí, sino desde el seeder [1:40].

php public function definition(): array { return [ 'user_id' => rand(1, 10), 'title' => fake()->sentence(), 'body' => fake()->text(), ]; }

¿Por qué se asigna la categoría desde el seeder?

Porque la estrategia consiste en que cada categoría genere 20 preguntas de forma directa. Para lograrlo, se necesita una relación hasMany definida en el modelo Category [2:10].

php public function threads() { return $this->hasMany(Thread::class); }

En el seeder, se recorren las categorías y cada una crea sus propias preguntas, asignando automáticamente el category_id correcto sin intervención manual.

¿Cuál es el resultado final de la migración con datos falsos?

Al ejecutar el comando que corre migraciones y seeders juntos [2:42]:

bash php artisan migrate --seed

El sistema produce:

  • 10 categorías previamente configuradas.
  • 200 preguntas distribuidas equitativamente: 20 por cada categoría.
  • Cada pregunta pertenece a un usuario aleatorio entre los 10 de prueba.

Esta combinación de migración bien estructurada, factory con datos ficticios y seeder que aprovecha las relaciones de Eloquent permite construir un conjunto de datos robusto para cualquier prueba funcional. Con las 200 preguntas listas, el paso siguiente será mostrarlas en el componente del frontend.

¿Has trabajado con factories y seeders en tus proyectos? Comparte tu experiencia o dudas en los comentarios.