Los Seeders son la solución que provee Laravel para agregar datos de prueba a nuestras aplicaciones en el entorno local y los datos iniciales para el despliegue a producción. En este nuevo videotutorial, crearemos un Seeder para cargar las primeras notas de nuestra app en la base de datos de MySQL.

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

Generación de Seeders

Un Seeder es una clase de PHP típicamente ubicada en el directorio database/seeders. Puedes generar un Seeder usando el comando php artisan make:seeder seguido del nombre del Seeder:

php artisan make:seeder NoteSeeder

Al ejecutar este comando se generará el archivo database/seeders/NoteSeeder.php en tu aplicación.

Insertar datos en la base de datos a través de un Seeder

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

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class NoteSeeder extends Seeder
{
    public function run()
    {
        DB::table('notes')->insert([
            'title' => 'Mi primera nota',
            'content' => 'Contenido de la primera nota',
        ]);
    }
}

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 (en nuestro ejemplo se trata de la tabla notes). Luego, encadenamos el llamado al método insert que acepta un arreglo 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:

<?php

// (namespace opcional aqui)

use Illuminate\Support\Facades\DB;

Registrar Seeders

Los Seeders son registrados en la clase DatabaseSeeder en database/seeders/DatabaseSeeder.php.

Dentro del método run, llamemos al método call pasando como argumento el nombre de la clase de nuestro Seeder:

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        $this->call(NoteSeeder::class);
    }
}

NoteSeeder::class devolverá el nombre completo de la clase (incluyendo su espacio de nombres) como una cadena de texto.

Ejecutar Seeders

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

php artisan db:seed

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

php artisan db:seed --class=NoteSeeder

También puedes ejecutar el comando migrate:fresh y los Seeders al mismo tiempo pasando la opción --seed para eliminar todas las tablas de la base de datos, re-ejecutar todas las migraciones y re-ejecutar todos los Seeders:

php artisan migrate:fresh --seed

Este comando es muy útil durante los primeros pasos del desarrollo de tu proyecto, pero sería catastrófico ejecutarlo en el entorno de producción, ya que perderías los datos reales de tu aplicación.

Agregando datos reales desde los Seeders

A veces necesitas datos para que tu aplicación funcione correctamente desde el principio, como roles de usuario, administrador, categorías iniciales, etc. Los Seeders son perfectos para ello.

Práctica tus nuevos conocimientos creando una tabla de categorías con el sistema de migraciones de Laravel y agregando algunas categorías a través de los Seeders.

Aprende más sobre bases de datos y SQL con nuestro libro digital disponible en Leanpub con descuento para nuestros estudiantes del Curso de Laravel 10.

Ver más

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 10 Lección siguiente Obtener registros de la base de datos con Laravel 10