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
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),
];
}
Seeder
Creamos la clase Seeder:
php artisan make:seeder RevisorSeeder
Y creamos su definición para en este caso, generar 20 revisores:
public function run()
{
Revisor::factory()
->count(20)
->create();
}
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
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
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);
}
}
Espero que os sirva de ayuda. Un saludo!
Top comments (1)
Muchísimas gracias bro!!!
Me sirvió un mundo.
Bendiciones desde Venezuela.