Durante la etapa de desarrollo, resulta de gran utilidad contar con datos iniciales y de prueba para evaluar distintas funcionalidades de nuestra aplicación. Por ejemplo, realizar consultas a la base de datos, visualizar información que nos facilite la verificación de las funcionalidades implementadas en nuestra aplicación, etc. Todo esto lo podemos lograr con los Seeders en Laravel.
Hola, ¿Cómo están? Continuamos con el curso de Laravel.
¡Empecemos!
Seeders en Laravel
Los seeders es una funcionalidad de Laravel que nos permite llenar nuestra base de datos con datos de prueba o datos iniciales de manera automatizada. Estos datos se utilizan comúnmente durante la fase de desarrollo. Como también, para iniciar el sistema en producción.
Crear los Seeder
Para generar y ejecutar un Seeder en Laravel, utilizaremos Artisan a través de la Terminal. En primer lugar, crearemos un seeder para el modelo “Profesor”. Ejecutamos la siguiente línea de código de Artisan.
php artisan make:seeder ProfesorSeeder
Este comando creará un clase llamada “ProfesorSeeder” en el directorio “database/seeders”, En este archivo, utilizaremos los métodos que nos ofrece Eloquent ORM para insertar datos a las tabla “profesores” de nuestra base de datos, de manera similar como lo hicimos desde Tinker en la anteriores clases.
Lo primero es realizar la referencia al modelo “Profesor”.
use App\Models\Profesor;
En el metodo “run” creamos el objeto $profesor que va ser una nueva instancia del modelo “Profesor”, llenamos sus propiedades con su respectivo valor. Finalmente utilizaremos el método “save” para guardar los datos. Este proceso lo realizaremos tres veces, así tendremos tres registros en la tabla “Profesores” de la base de datos.
$profesor1 = new Profesor(); $profesor1->nombre_apellido = 'Jaime Peredo Lopez'; $profesor1->profesion = 'Ingenieria de sistemas'; $profesor1->grado_academico = 'Licenciatura'; $profesor1->save(); $profesor2 = new Profesor(); $profesor2->nombre_apellido = 'Daniel Medina Coria'; $profesor2->profesion = 'Administración de empresas'; $profesor2->grado_academico = 'Licenciatura'; $profesor2->telefono = '727366732'; $profesor2->save(); $profesor3 = new Profesor(); $profesor3->nombre_apellido = 'Pedro Alfonso Poveda Matos'; $profesor3->profesion = 'Ingenieria comercial'; $profesor3->grado_academico = 'Master'; $profesor3->save();
Seguidamente, de manera similar procedemos a crear un seeder para la tabla “Alumnos”, desde Artisan ejecutamos el siguiente comando.
php artisan make:seeder AlumnoSeeder
Agregamos la referencia del modelo “Alumno”.
use App\Models\Alumno;
Creamos la variable $alumno, llenamos sus propiedades y finalmente utilizamos el método “save”; igualmente llenamos con tres registros la tabla “Alumnos” de la base de datos.
$alumno1 = new Alumno(); $alumno1->nombre_apellido = 'Jaime Duram Miranda'; $alumno1->edad = 18; $alumno1->telefono = '+725357789'; $alumno1->direccion = 'Los Lirios #5566'; $alumno1->save(); $alumno2 = new Alumno(); $alumno2->nombre_apellido = 'Mary Isabel Corona Vela'; $alumno2->edad = 21; $alumno2->save(); $alumno3 = new Alumno(); $alumno3->nombre_apellido = 'Brain Castro Cardozo'; $alumno3->edad = 23; $alumno3->telefono = '+591355433'; $alumno3->save();
Por último, crearemos el Seeder para la tabla “Cursos”, aquí hay que prestar atención y ver nuestro modelo entidad-relación, la tabla “Cursos” está relacionado tanto con la tabla “Profesores” como la tabla “Alumnos”.
Creamos el Seeder “Curso” ejecutando el siguiente comando.
php artisan make:seeder CursoSeeder
Agregamos la referencia al modelo “Curso”.
use App\Models\Curso;
Al momento de crear la variable $curso, debemos tomar en cuenta que la tabla “Cursos” está relacionada con la tabla “Profesores”. Al completar las propiedades en el campo ‘profesor_id’, es necesario que coincida con un “id” existente en la tabla ‘Profesores’.
Asimismo, podemos establecer que llenaremos tres registros en la tabla “Profesores” mediante los Seeder creados anteriormente. Al generar los datos en la tabla “Profesores”, el campo “id” se llenará de manera correlativa con identificadores uno, dos y tres, respectivamente.
$curso1 = new Curso(); $curso1->materia = 'Desarrollo web con Laravel'; $curso1->nivel = '6to nivel'; $curso1->horas_academicas = '120 Horas'; $curso1->profesor_id = 1; $curso1->save(); $curso2 = new Curso(); $curso2->materia = 'Contabilidad básica'; $curso2->nivel = '2do nivel'; $curso2->horas_academicas = '60 Horas'; $curso2->profesor_id = 2; $curso2->save();
Insertar datos en la tabla pivot
Para concluir, la relación entre las tablas “Alumnos” y “Cursos” es de muchos a muchos. Eloquent proporciona funciones específicas para llenar la tabla pivot “alumno_curso”. El método que utilizaremos es “attach”.
En la misma clase “CursoSeeder” creamos la relación que existe entre “Alumno” y “Curso”.
$curso1->alumnos()->attach(1); $curso1->alumnos()->attach(2); $curso1->alumnos()->attach(3); $curso2->alumnos()->attach(1); $curso2->alumnos()->attach(3);
Ejecutar los Seeders
Después de haber creado los Seeder, procedemos a su ejecución. Esto puede hacerse de manera individual o todos en conjunto. Para ejecutar cada seeder de manera individual, podemos utilizar Artisan respetando el orden en el que fueron creados de la siguiente manera:
php artisan db:seed --class=ProfesorSeeder php artisan db:seed --class=AlumnoSeeder php artisan db:seed --class=CursoSeeder
Podemos abrir las tablas de nuestra base de datos para verificar que la información fue cargada con éxito.
Otra opción es ejecutar todos los Seeder simultáneamente. Para lograr esto, empleamos la clase Seeder principal “DatabaseSeeder”, que al ejecutar un Seeder desde Artisan, invoca a todos los Seeder registrados en esta clase. Para lograr este propósito se requiere invocarlos explícitamente mediante el método “call”.
$this->call(ProfesorSeeder::class); $this->call(AlumnoSeeder::class); $this->call(CursoSeeder::class);
Los seeders están listos, por lo que ahora podemos cargar nuestras tablas de base de datos con datos. Para hacerlo, ejecutamos inicialmente la siguiente línea de código utilizando Artisan.
php artisan migrate:fresh
Este código lo primero que hará es eliminar todos los datos y las tablas de nuestra base de datos y seguidamente volverá a generar todas las tablas sin datos. Ahora ejecutamos la siguiente línea de código que llenará las tablas con datos.
php artisan db:seed
También, podemos ejecutar las Migraciones y los Seeders en un solo comando. Por ejemplo:
php artisan migrate:fresh --seed
Podemos abrir las tablas de nuestra base de datos para verificar que la información fue cargada con éxito. En la siguiente clase veremos más de cómo ingresar datos de prueba en nuestra base de datos, esta vez con los Factories de Laravel.
¡Te espero en la próxima clase!
Saludos y éxitos.

Victor Peña
Desarrollador de software Backend Developer, experto en Laravel Framework, PHP, JavaScript y MySQL. Creador de contenidos de emprendimiento y desarrollo de software.
Pingback: Constructor de consultas SQL en Laravel - Norvic Software