5.11 Creación de Datos Iniciales y de Prueba: Seeders, Factories y Faker
5.11.1 Introducción
En los temas anteriores aprendimos a crear tablas con migraciones y a manipular datos manualmente. Sin embargo, en muchos proyectos reales necesitamos:
- Crear datos iniciales, como usuarios, roles o productos básicos.
- Generar datos masivos de prueba para desarrollo y pruebas funcionales.
Laravel nos ofrece tres herramientas clave para ello:
- Seeders: para insertar datos conocidos y permanentes.
- Factories: para generar datos aleatorios.
- Faker: para crear contenido realista de forma automática.
Este tema parte de un proyecto limpio (creado con laravel new) o descargado desde Git y posicionado en la rama 5.11-inicio.
Utilizaremos la base de datos cursoLaravel y actualizaremos el archivo .env para garantizar la conexión correcta.
5.11.2 Preparación del Entorno
5.11.2.1 Crear la tabla y el modelo Product
En este tema vamos manejar una tabla de productos. Creamos la migración y el modelo:
Editamos la migración:
Migración de la tabla products
Editamos el modelo Product.php para permitir asignación masiva:
Ejecutamos la migración:
5.11.2.2 Controlador, ruta y vista
Creamos el controlador:
Ruta en web.php:
Método index() en el controlador:
Método index
Antes de crear la vista vamos a crear el layout layouts/app.blade.php para que todas las vistas tengan un diseño común.
Layout app.blade.php
Creamos resources/views/product/index.blade.php:
En este caso la vista es sencilla, solo muestra una lista de productos, en forma de cards. Más adelante con CSS ya le cambiaremos el aspecto. Utilizamos @forelse para mostrar un mensaje si no hay productos.
Vista index.blade.php
Añadimos un par de reglas CSS en public/css/app.css para mejorar la presentación de la vista:
.product-container {
display: flex;
flex-wrap: wrap;
gap: 20px;
}
.card {
border: 1px solid #ccc;
padding: 15px;
width: 200px;
box-shadow: 2px 2px 10px rgba(0,0,0,0.1);
}
Nos falta añadir el CSS a la vista. Editamos el layout app.blade.php para incluir el CSS:
Layout app.blade.php con CSS
5.11.3 Seeders
5.11.3.1 Introducción a Seeders
Los seeders permiten poblar la base de datos con datos iniciales que queremos tener siempre disponibles.
5.11.3.2 Crear y registrar un seeder
En el seeder:
ProductSeeder con 4 productos
Editamos DatabaseSeeder.php para incluirlo:
Ejecutamos:
5.11.3.3 Ejecutar un seeder específico
5.11.4 Factories
5.11.4.1 Introducción a Factories
Las factories permiten generar muchos datos automáticamente para pruebas y desarrollo.
5.11.4.2 Crear una factory
Definición simple:
Factory inicial (manual)
Modificamos el modelo Product.php para usar la factory:
Modelo Product con factory
5.11.4.3 Usar factory en un seeder
Modificamos el contenido del seeder ProductSeeder.php para usar la factory. En la función run() quitamos los prodcutos que habíamos creado manualmente y añadimos la factory:
5.11.5 Faker
5.11.5.1 Introducción a Faker
Faker genera datos aleatorios que parecen reales (nombres, direcciones, textos...). Laravel lo usa integrado en Factory.
5.11.5.2 Tabla de métodos útiles de Faker
| Método | Descripción | Ejemplo |
|---|---|---|
name() |
Nombre completo | Juan Pérez |
email() |
Email realista | juan@mail.com |
sentence(n) |
Frase con n palabras |
Lorem ipsum dolor sit amet. |
paragraph() |
Párrafo de texto | Lorem ipsum dolor sit amet... |
text(n) |
Texto de longitud n |
Texto aleatorio |
word() |
Una palabra aleatoria | laptop |
numberBetween(a, b) |
Número entre a y b |
47 |
randomElement([...]) |
Valor de un array | 'IT' |
boolean() |
true o false aleatorio | true |
date() |
Fecha aleatoria | 2023-01-15 |
company() |
Nombre de empresa | Grupo Pérez SL |
5.11.5.3 Aplicar Faker a ProductFactory
ProductFactory con faker
Ejecutamos migraciones y seeders de nuevo:
Comprobamos la vista: productos aleatorios, pero ahora realistas.
5.11.6 Conclusiones
- Los seeders son útiles para poblar la base de datos con datos estáticos.
- Las factories permiten generar cientos de registros en segundos.
- Faker mejora la calidad de los datos de prueba.
- Todo esto acelera y mejora el desarrollo realista de tu aplicación.
Proximo tema: relaciones entre tablas (hasMany, belongsTo, etc.).
5.11.7 Ejercicio Práctico
Crea una tabla de empleados y genera 100 empleados con datos aleatorios usando una factory y Faker.