Laravel 6.*

Laravel provee un sencillo método para insertar datos de prueba o los datos iniciales de tu aplicación en la base de datos, me refiero a los seeders. En esta lección crearemos un seeder para cargar las primeras notas de nuestro proyecto en la DB.

Mira el código en GitHub: actual, resultado, comparación.

Generación de seeders

Un seeder no es más que una clase de PHP, podemos crearla manualmente o generarla usando el comando de Artisan make:seeder seguido del nombre del seeder:

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

Insertar datos en la DB a través de un seeder

Dentro del método run() del archivo NoteSeeder.php escribiremos el siguiente código:

Para insertar datos, utilizaremos el constructor de consultas de Laravel. Vamos a llamar al método table del Facade DB pasando como primer argumento el nombre de la tabla con la que queremos interactuar. Luego encadenamos el llamado al método insert que acepta un array asociativo con 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:

Ahora duplica las líneas dentro del método run para agregar más notas.

Registrar seeders

Los seeders son registrados en la clase DatabaseSeeder en 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:

NoteSeeder::class devolverá el nombre de la clase como una cadena de texto.

En lugar de utilizar ::class también podemos pasar el nombre de la clase como una cadena de texto 'NoteSeeder'. Pero la sintaxis anterior nos puede proveer de una advertencia si la clase no existe y de autocompletado en el IDE si la clase sí existe.

Ejecutar seeders

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 junto con los seeders pasando la opción --seed:

Como aprendimos en la lección pasada al ejecutar el comando migrate:fresh se estarán borrando y recreando todas las tablas de tu base de datos, por lo tanto no vamos a tener datos repetidos generados por los seeders.

Agregando datos reales desde los seeders

Es importante cargar registros con contenido real o similar al contenido real que tendrá la aplicación, para poder probar el diseño adecuadamente. De hecho, si revisas la aplicación de notas en el navegador verás que cada nota puede tener dimensiones diferentes e incluso código HTML. Vamos a cargar estas notas más reales por medio de los seeders:

Puesto que el contenido de las notas reales puede contener HTML y varias líneas de código, voy a colocarlas en una carpeta notes dentro de database/seeds y a cargarlas en la nota utilizado el método get del Facade File:

__DIR__ es una «constante mágica» de PHP que devuelve el directorio actual del archivo desde donde es utilizada. Esto funcionará porque el directorio notes es relativo al directorio donde está el seeder. Otra opción sería usar database_path('seeds/notes/installation.html).

Realiza el mismo paso para el resto de las notas «reales», elimina las notas de mentira y vuelve a ejecutar php artisan migrate:fresh --seed.

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Creación de tablas con el sistema de migraciones en Laravel 6 Lección siguiente Obtener registros de la base de datos con Laravel