Skip to main content

¿Qué es el seeding?

El seeding es un mecanismo para introducir en la base de datos datos de muestra o iniciales. Al preparar el entorno de desarrollo o al ejecutar pruebas automatizadas, suele necesitarse un estado inicial con datos. Introducirlos manualmente cada vez es costoso, así que se encapsulan en seeders para poder ejecutarlos repetidamente. Las clases seeder se guardan en el directorio database/seeders. Por defecto se incluye la clase DatabaseSeeder.

Creación de un seeder

Genera una nueva clase seeder con el comando Artisan make:seeder.
El archivo generado se ubica en database/seeders/UserSeeder.php.

Implementación del seeder

Escribe la lógica de inserción dentro del método run(). Puedes usar la fachada DB o modelos Eloquent.

Usando la fachada DB

Usando modelos Eloquent

Durante el seeding la protección de mass assignment se desactiva automáticamente. Puedes insertar datos sin preocuparte por la configuración de $fillable o $guarded.

Combinación con las factories de modelo

Cuando necesitas grandes volúmenes de datos de prueba, resulta muy útil combinarlo con las factories de modelo. Con las factories puedes generar en bloque datos aleatorios ficticios.
Consulta la documentación de factories de Eloquent para más detalles sobre su uso.

Uso de DatabaseSeeder

DatabaseSeeder es el punto de entrada que gestiona la ejecución de múltiples seeders. Indica los seeders a ejecutar con call().
Los seeders se ejecutan en el orden en el que se pasan a call(). Si hay restricciones de clave foránea, ordénalos de forma que las tablas referidas se sembren primero (por ejemplo, usersposts).

Ejecución del seeder

Ejecutar todos los seeders

Se invoca DatabaseSeeder y desde ahí se ejecutan en orden los seeders indicados en call().

Ejecutar solo un seeder concreto

Con la opción --class puedes indicar la clase seeder a ejecutar.

Ejecución junto con las migraciones

Añadiendo la opción --seed al comando migrate:fresh, recreas todas las tablas y luego ejecutas los seeders de una vez.
Para ejecutar solo un seeder concreto, usa la opción --seeder.
migrate:fresh elimina y recrea todas las tablas. Se pierden todos los datos existentes, así que no lo uses en producción.

Ejecución en producción

Al intentar ejecutar el seeding en producción aparece un prompt de confirmación. Para ejecutarlo sin confirmación, usa --force.
El seeding en producción puede sobrescribir o perder datos. Haz siempre una copia de seguridad antes de ejecutarlo.

Supresión de eventos del modelo

Si quieres evitar que se disparen los eventos del modelo (creating, created, etc.) durante el seeding, usa el trait WithoutModelEvents.
También se aplica a los seeders hijos ejecutados a través de call().

Ejemplo práctico: seeder de una aplicación blog

Ejemplo para preparar los datos iniciales de un blog con usuarios y posts.
Cómo se ejecuta:

Próximos pasos

Introducción a Eloquent

Aprende a obtener y manipular con Eloquent ORM los datos introducidos por los seeders.
Última modificación el 13 de julio de 2026