En la lección anterior cargamos datos de prueba utilizando un administrador de base de datos, sin embargo esto trae como consecuencia que cada vez que ejecutemos migrate:refresh o migrate:fresh perdamos dichos datos. En esta lección veremos una mejor forma de cargar datos de prueba utilizando los Seeders de Laravel.

Repositorio

Ver el código de esta lección en GitHub

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Notas

Generar un seeder

Para generar un seeder utilizamos el comando de Artisan make:seeder seguido del nombre del seeder:

Al ejecutar este comando se generará un archivo ProfessionSeeder.php dentro del directorio database/seeds.

Código del seeder

Dentro del método run() del archivo ProfessionSeeder.php escribimos el código de nuestro seeder:

Para insertar datos, utilizaremos el constructor de consultas SQL de Laravel. Que incluye una interfaz fluida para construir y ejecutar consultas a la base de datos. Para ello llamaremos al método table del Facade DB pasando como argumento el nombre de la tabla con la que queremos interactuar. El método insert acepta un array asociativo que reprensetará las columnas y valores que queremos guardar en la tabla.

Para utilizar el facade DB:: debemos importar \Illuminate\Support\Facades\DB al principio del archivo:

Registrar seeder

Los seeders son registrados en la clase DatabaseSeeder dentro de database/seeds/DatabaseSeeder.php. Dentro del método run llamamos al método call pasando como argumento el nombre de la clase de nuestro seeder:

En este caso ProfessionSeeder::class devolverá el nombre de la clase. En lugar de utilizar ::class también podemos pasar el nombre de la clase como una cadena de texto 'ProfessionalSeeder'.

Eliminar registros

Es posible que antes de ejecutar un seeder necesitemos eliminar el contenido existente. Para realizar esto podemos utilizar el método truncate, que se encarga de vaciar la table:

Ejecutar un seeder

Para ejecutar los seeders utilizamos el comando db:seed desde la terminal:

En caso de que tengas múltiples seeders, puedes pasar la opción --class que te permite ejecutar solamente el seeder pasado como argumento:

También puedes ejecutar el comando migrate:fresh o migrate:refresh junto con los seeders pasando la opción --seed:

Desactivar revisión de claves foráneas

Si una tabla tiene una referencia de clave foránea, necesitarás desactivar la revisión de claves foráneas utilizando un sentencia antes de vaciar dicha tabla (por ejemplo usando el método truncate).

Esto podemos lograrlo con la sentencia SQL SET FOREIGN_KEY_CHECKS=[0|1]. En Laravel podemos ejecutar dicha sentencia usando el método DB::statement de esta manera:

Utilizando la misma sentencia pero con el valor 1 reactivamos la revisión de claves foráneas luego de ejecutar nuestro seeder.

En caso de que quieras vaciar varias tablas a la vez, puedes utilizar el siguiente código dentro de la clase DatabaseSeeder:

Ahora podrás llamar al método truncateTables pasando un arreglo con los nombres de las tablas que quieras vaciar.

Contraseñas dentro de un seeder

En caso de que quieras insertar usuarios de esta manera, recuerda encriptar las contraseñas utilizando el helper bcrypt:

Únete a la discusión

Regístrate en Styde y obtén una invitación a nuestro Slack.

Lección anterior Crear y asociar tablas usando las migraciones de Laravel (con claves foráneas) Lección siguiente Constructor de consultas SQL de Laravel