Contenido del curso
Configuración base
- 3

Configuración inicial de un foro en Laravel
04:59 min - 4

Personalizar componentes Blade con Tailwind CSS
10:26 min - 5

Primer componente Livewire en Laravel
11:10 min - 6

Categorías dinámicas con Laravel y Blade
06:18 min - 7

Migración y factory para preguntas en Laravel
Viendo ahora - 8

Cómo listar preguntas con Tailwind y Laravel
07:57 min - 9

Respuestas anidadas y migrate fresh en Laravel
06:26 min
Preguntas
Pregunta
Respuesta
Flujo de trabajo tradicional
Conclusiones
Migración y factory para preguntas en Laravel
Resumen
Aprende a configurar la entidad Thread en Laravel para registrar preguntas, definir relaciones con usuarios y categorías, y generar 200 registros de prueba con factories y seeders. Ideal si estás construyendo un foro o sistema de Q&A y necesitas poblar tu base de datos rápido.
¿Cómo crear la entidad Thread con migración y factory en Laravel?
Todo arranca desde la terminal. Con un solo comando puedes generar la entidad, su migración y el factory asociado, lo que te ahorra crear cada archivo a mano.
El comando que necesitas es php artisan make:model Thread acompañado del trait que incluye entidad, factory y migración. Thread significa hilo, y representa cada pregunta dentro del sistema.
¿Qué hace el comando make:model en Laravel? Crea el modelo Eloquent de una entidad. Si le pasas las flags adecuadas, también genera la migración, el factory y el seeder en un solo paso.
¿Qué campos necesita la migración de preguntas?
Una pregunta no vive aislada: pertenece a un usuario y a una categoría. Por eso la migración debe declarar dos llaves foráneas antes de los campos propios.
- category_id: referencia al campo
idde la tabla de categorías, cononDeleteen cascada. - user_id: referencia al campo
idde la tabla de usuarios, también con borrado en cascada. - title: el título de la pregunta.
- body: el contenido o cuerpo de la pregunta.
La configuración onDelete en cascada asegura que si eliminas una categoría o un usuario, sus preguntas asociadas se borren automáticamente. Así mantienes la integridad referencial sin escribir lógica extra.
¿Cómo configurar el factory para generar preguntas falsas?
El factory define la receta para crear datos fake. Aquí es donde decides qué valores aleatorios tendrá cada pregunta cuando llames al seeder.
Para el campo user_id aprovechas que ya existen 10 usuarios de prueba y le indicas al factory que asigne cualquiera de ellos al azar. El title se llena con una oración generada por faker, y el body usa el método text para producir un párrafo más extenso.
¿Por qué no se define category_id en el factory? Porque esa relación se establece directamente desde el seeder de categorías usando el método
hasMany, no desde el factory de la pregunta.
¿Cómo relacionar categorías y preguntas con hasMany?
Dentro del seeder de categorías indicas que cada categoría tendrá 20 preguntas asociadas. Para que Laravel sepa cómo conectar ambas tablas, defines en el modelo Category un método que retorne hasMany(Thread::class).
Este método es la pieza clave. Sin él, el seeder no encontraría la relación y no podría poblar las preguntas vinculadas a cada categoría. La relación física en la base de datos ya está garantizada por las llaves foráneas, pero Laravel necesita esta declaración a nivel de modelo para orquestar la creación masiva.
¿Cómo ejecutar la migración y poblar la base de datos?
Con todo configurado, el último paso es correr php artisan migrate:fresh --seed desde la terminal. Este comando borra las tablas, las vuelve a crear y ejecuta los seeders en orden.
El resultado final es contundente:
- 10 categorías generadas.
- 20 preguntas por categoría.
- 200 preguntas en total, cada una con su usuario y categoría asignados.
Esa cantidad de registros te da margen suficiente para probar paginación, filtros, búsquedas y cualquier funcionalidad que dependa de un volumen realista de datos. Trabajar con 5 o 10 registros falsos suele ocultar bugs que solo aparecen cuando la tabla crece.
¿Ya tienes lista tu base de datos con las 200 preguntas? Cuéntame en los comentarios qué nombre le pusiste a tus categorías de prueba.