DEV Community

Diego
Diego

Posted on

Generar datos de pruebas en un proyecto con Laravel 10

Había leído muchas veces sobre este tema, pero no me había puesto a generar datos de pruebas con Laravel 10. Al final lo he conseguido, y quiero compartirlo.

Vamos a necesitar dos clases. Una clase de tipo Factory y otra clase de tipo Seeder. La primera nos servirá para definir cómo va a ser cada fila, y la segunda, creamos las filas que necesitemos.

En el ejemplo que voy a usar, vamos a imaginar que vamos a crear revisores para las comunicaciones de un congreso.

Factory

Lanzamos primero el comando para crear la clase Factory:

php artisan make:factory RevisorFactory -m Revisor
Enter fullscreen mode Exit fullscreen mode

Ahora creamos la definición:

 public function definition()
    {
        return [
            'congreso' => 'test',
            'user_id' => 1,
            'email' => $this->faker->unique()->safeEmail,
            'genero' => $this->faker->numberBetween(1, 2),   
            'nombre' => $this->faker->firstName,
            'apellido1' => $this->faker->lastName,
            'apellido2' => $this->faker->lastName,
            'pais_trabajo_id' => 'ES',
            'provincia_trabajo_id' => $this->faker->numberBetween(1, 50),

        ];
    }
Enter fullscreen mode Exit fullscreen mode

Seeder

Creamos la clase Seeder:

php artisan make:seeder RevisorSeeder
Enter fullscreen mode Exit fullscreen mode

Y creamos su definición para en este caso, generar 20 revisores:

public function run()
    {
        Revisor::factory()
            ->count(20)
            ->create();
    }
Enter fullscreen mode Exit fullscreen mode

Creamos los datos de prueba

A continuación, lanzamos este comando, y se generarán en la base de datos 20 revisores con la definición que hayamos especificado:

php artisan db:seed --class=RevisorSeeder
Enter fullscreen mode Exit fullscreen mode

Localización en español

Si queremos localizar en español los datos, debemos especificar la clave siguiente en nuestro fichero .env

FAKER_LOCALE=es_ES
Enter fullscreen mode Exit fullscreen mode

Extra: Asociamos temas a los revisores

Si queremos asociar temas a los revisores recién creados, una forma de hacerlo es modificando el Seeder:

public function run()
    {
        Revisor::factory()
            ->count(20)
            ->create();

        //Asociamos temas a los revisores
        $revisores = Revisor::whereCongreso('test')->get();

        foreach ($revisores as $r) {
            //Selecciono un numero aleatorio de temas
            $num_temas = rand(1, 10);
            //Selecciono los temas
            $temas = Tema::inRandomOrder()->take($num_temas)->get();
            //Asocio los temas al revisor
            $r->temas()->attach($temas);
        }
    }
Enter fullscreen mode Exit fullscreen mode

Espero que os sirva de ayuda. Un saludo!

Top comments (1)

Collapse
 
drfcozapata profile image
Francisco Zapata

Muchísimas gracias bro!!!
Me sirvió un mundo.
Bendiciones desde Venezuela.