Model Factories
Un factory es una clase usada principalmente para desarrollo Permite llenar nuestra base de datos con registros de prueba php artisan make:factory PostFactory
use Faker\Generator as Faker;
$factory->define(App\User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
'remember_token' => str_random(10),
];
});
Crear un objeto con make() o con create(), el primero crea una variable, el segundo además la guarda en base de datos: $user = factory(App\User::class)->make();
$user = factory(App\User::class)->create();
Podemos crear más de un registro en la misma orden: $users = factory(App\User::class, 3)->create();
Además podemos fijar o sobreescribir el valor de los campos: $user = factory(App\User::class)->create([
'name' => 'Abigail',
]);
Ejemplo
Generar valores aleatorios
La clase seeder en lugar de generar un valor concreto, podemos hacer que invoque a una clase Factory En esta clase podremos generar valores aleatorios a partir de la clase Faker que tenemos disponible dentro de la clase Factory. Es ésta una librería disponible para php También va a ser posible invocar un número repetitivo de veces a la ejecución del método de esta clase, por lo que la lectura es que podremos poblar un número de registros que deseemos nuestra tabla. creamos un factory de nuestra tabla php artisan make:factory ClienteFactory
Nos habrá creado una clase llamada ClienteFactory Si creamos una factory con solo el nombre, igualmente nos añadirá el identificador Factory a la clase creada php artisan make:factory Cliente2
Vemos como nos ha creado dos clases que terminan con el identificador Factory Ahora implementamos el método definition de la clase creada para que nos devuelva el un array asociativo dando un valor para cada uno de los campos de la tabla. Para asignar un valor aleatorio, usamos el objeto faker disponible dentro de la clase ClienteFactory, ya que es un atributo de la propia clase public function definition()
{
return [
"nombre"=>$this->faker->firstName(),
"apellido"=>$this->faker->lastName(),
"direccion"=>$this->faker->address(),
"email"=>$this->faker->email(),
];
}
Ahora lo invocamos en el método run de la clase ClienteSeeder Observe que a partir del modelo Cliente tenemos disponible su método factory donde invocamos 50 veces al método. Este método va a invocar a la clase ClienteFactory, de la que en cada invocación va a obtener un registro con valores para cada uno de los campos de la tabla Cada uno de ellos los creara o insertará en la tabla correspondiente asigna a este modelo public function run()
{
Cliente::factory(50)->create();
//
}
Vemos el resultado visualizando con phpmyadmin el contenido de la tabla
Ahora sólo nos queda ejecutar esta acción, esto lo haremos en la línea de comandos de artisan
php artisan db:seed
Esta acción también la podemos hacer al ejecutar la migración php artisan migrate:fresh --seed