Los Model Factories nos permiten crear registros de prueba, ya sea para cargar nuestra base de datos con «información falsa» o «información de prueba» o para crear las condiciones necesarias para ejecutar pruebas automatizadas. En esta lección practicaremos con la creación de modelos desde Tinker y desde nuestros seeders utilizando Model Factories. Además te enseñaré cómo generar tus Model Factories personalizados, adaptarlos al modelo correspondiente y también veremos una pequeña introducción al uso del componente Faker.

Repositorio

Ver el código de esta lección en GitHub

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Notas

Generar un Model Factory

Para poder utilizar un Model Factory necesitamos generarlo primero con el comando make:factory. El Model Factory será generado en el directorio database/factories.

php artisan make:factory ProfessionFactory

Dentro de nuestro Model Factory especificamos el atributo o los atributos que queremos generar de forma aleatoria:

$factory->define(\App\Profession::class, function (Faker $faker) {
    return [
        'title' => $faker->sentence
    ];
});

Además es importante que indiquemos el nombre del modelo que queremos enlazar a dicho Model Factory (en este caso \App\Profession::class).

Para no tener que agregar el nombre del modelo de forma manual podemos pasar la opción --model al comando make:factory:

php artisan make:factory ProfessionFactory --model=Profession

Al generar un modelo con el comando make:model también podemos generar un Model Factory y/o una migración pasando las opciones -f y/o -m por ejemplo:

php artisan make:model Skill -mf

Utilizando el componente de PHP Faker indicamos que el valor de title será una oración aleatoria:

$factory->define(\App\Profession::class, function (Faker $faker) {
    return [
        'title' => $faker->sentence
    ];
});

Pasando un número como primer argumento a sentence podemos indicar el número de palabras que queremos que contenga la oración: $faker->sentence(3). Esto devolverá oraciones con 2, 3 o 4 palabras, o si queremos estrictamente que sean 3 palabras podemos llamar al método de esta forma: $faker->sentence(3, false)

Componente Faker

El componente Faker es una librería de PHP que genera datos de prueba por nosotros. Por ejemplo, podemos generar un nombre:

$faker->name;
// 'Jazmyne Romaguera'

O un texto aleatorio:

$faker->text;
// Dolores sit sint laboriosam dolorem culpa et autem. Beatae nam sunt fugit
// et sit et mollitia sed.

Incluso números de teléfono:

$faker->cellphone;
// 9432-5656

Utilizar un Model Factory

Para utilizar un Model Factory debemos llamar al helper factory, especificando el nombre del modelo como argumento y finalmente encadenando el llamado al método create.

factory(User::class())->create();

Esto va a crear un usuario en la base de datos y va a retornar el modelo en cuestión, en este caso un objeto de la clase User:

App\User {
    name: "Jazmyne Romaguera",
    email: "[email protected]",
    updated_at: "2017-11-24 15:55:32",
    created_at: "2017-11-24 15:55:32",
    id: 4,
}

Cada vez que ejecutamos el método create() creamos un nuevo registro aleatorio. Si pasamos un array asociativo al método create() podemos sobrescribir o asignar propiedades extras:

factory(User::class)->create([
    'profession_id' => $professionId
]);

Para cargar un determinado número de registros pasamos como segundo argumento la cantidad que queremos crear:

factory(User::class, 48)->create();

También podemos lograrlo utilizando el método times():

factory(User::class)->times(48)->create();

Material relacionado

Únete a nuestra comunidad en Discord y comparte con los usuarios y autores de Styde, 100% gratis.

Únete hoy

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Manejo de relaciones con el ORM Eloquent Lección siguiente Módulo de usuarios con Laravel