Base de datos

icon picker
Factories

Model Factories

Un factory es una clase usada principalmente para desarrollo
Permite llenar nuestra base de datos con registros de prueba
Crear un factory:
php artisan make:factory PostFactory
Codificar un factory:
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),
];
});
Usar el factory:
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.
Pasos a realizar
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

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.