¿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 directoriodatabase/seeders. Por defecto se incluye la clase DatabaseSeeder.
Creación de un seeder
Genera una nueva clase seeder con el comando Artisanmake:seeder.
database/seeders/UserSeeder.php.
Implementación del seeder
Escribe la lógica de inserción dentro del métodorun(). 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.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().
call(). Si hay restricciones de clave foránea, ordénalos de forma que las tablas referidas se sembren primero (por ejemplo, users → posts).
Ejecución del seeder
Ejecutar todos los seeders
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.
--seeder.
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.
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.
call().
Ejemplo práctico: seeder de una aplicación blog
Ejemplo para preparar los datos iniciales de un blog con usuarios y posts.Próximos pasos
Introducción a Eloquent
Aprende a obtener y manipular con Eloquent ORM los datos introducidos por los seeders.