Articoli

Come generare dati di test o fittizi con le Factory di Laravel

Il Framework Laravel è dotato di molte funzionalità per rendere lo sviluppo web più semplice e veloce.

Una delle caratteristiche principali di Laravel è la capacità di utilizzare le factory per creare dati di test, anche con i Laravel faker.

In questo articolo andiamo a vedere come utilizzare le factory con Laravel e come popolare il DB con i Faker di Laravel.

Tempo di lettura stimato: 6 minuti

Cosa sono le Factory di Laravel

Una factory in Laravel è una classe che ci consente di generare dati di test. Le factory forniscono un modo per creare modelli con dati fittizi, mediante Faker Laravel, in modo da poter testare la tua applicazione senza la necessità di dati reali. Ciò è particolarmente utile quando sviluppi la tua applicazione e devi testare vari scenari.

Come creare una Factory

Per creare una factory in Laravel, dobbiamo eseguire il comando Artisan make:factory. Questo comando crea una nuova classe factory nella directory database/factories.

Ecco un esempio di come creare una factory per un modello User:

php artisan make:factory UserFactory --model=User

Questo comando creerà una classe UserFactory nella directory database/factories. L’opzione --model=User dice a Laravel che la fabbrica è per il modello User.

Come creare il modello della Factory

Una volta creata una factory, è necessario creare il modello di Factory. Puoi farlo definendo una chiusura nel metodo define della classe factory.

Ecco un esempio di come definire una factory per un modello User:

use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;

class UserFactory extends Factory
{
    protected $model = User::class;

    public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'password' => bcrypt('password'),
        ];
    }
}

In questo esempio definiamo una factory per il modello User. Il metodo definition restituisce un array che contiene gli attributi del modello User. In questo caso, generiamo un nome e un indirizzo email casuali utilizzando la libreria Faker e impostiamo la password su “password”.

Come usare una Factory

Una volta definita una factory, è possibile utilizzarla per creare dati di test. Per creare una singola istanza di un modello, è possibile utilizzare i metodi makecreate della factory.

Ecco un esempio di come creare un singolo modello User utilizzando il metodo create:

$user = User::factory()->create();

Questo codice crea un nuovo modello User con dati casuali e lo salva nel database.

Puoi anche utilizzare il metodo make per creare un’istanza del modello senza salvarlo nel database:

$user = User::factory()->make();

Questo codice crea un nuovo modello User con dati casuali ma non lo salva nel database.

Se desideri creare più istanze di un modello, puoi utilizzare il metodo count:

$users = User::factory()->count(10)->create();

Questo codice crea 10 nuovi modelli User con dati casuali e li salva nel database.

Laravel Faker

Cos’è Laravel Faker? Laravel Faker è una libreria PHP che genera dati falsi per te. Se hai bisogno di avviare il tuo database, creare documenti XML di bell’aspetto, completare la tua perseveranza per sottoporlo a stress test o rendere anonimi i dati presi da un servizio di produzione, allora devi usare i Laravel Faker.

Come usare i Faker

Alcune nozioni di base:

  • Impostazioni locali predefinite di Faker : per impostazione predefinita, Faker utilizza le impostazioni locali en_US. Puoi modificarlo per generare dati in diverse lingue e formati. Ad esempio, per utilizzare la locale francese, dovresti creare una nuova istanza Faker come questa:
    • $faker = Faker\Factory::create('fr_FR');
  • Generazione di dati falsi : puoi generare dati falsi chiamando metodi sulla tua istanza Faker. Ad esempio, per generare un nome falso, dovresti fare:
    • $name = $faker->name;
  • Formattatori di Faker : Faker fornisce molti formattatori che puoi utilizzare per generare diversi tipi di dati, come indirizzi, numeri di telefono e testo. Puoi vedere l’elenco completo dei formattatori nel repository GitHub di Faker .

Formattatori di Laravel Faker

I formattatori di Faker sono i metodi che chiami per generare dati falsi. Sono raggruppati per categoria, come PersonAddressText. Ecco come puoi usarli:

  • Accesso alla proprietà di Faker : puoi accedere a qualsiasi formattatore come proprietà. Ad esempio, per generare un nome falso, puoi fare:
    • $name = $faker->name;
  • Chiamate ai metodi di Faker : puoi anche chiamare i formattatori come metodi. Ciò è utile quando il formattatore accetta argomenti. Ad esempio, per generare un numero casuale compreso tra 10 e 20, puoi fare:
    • $number = $faker->numberBetween(10, 20);
  • Modifica dei dati con i modificatori optional() e unique() di Faker : questi modificatori ti consentono di controllare il modo in cui vengono generati i dati. Ad esempio, optional() fa in modo che un formattatore restituisca null una determinata percentuale di volte, e unique() garantisce che un formattatore non restituisca mai lo stesso valore due volte.

Creare un fornitori di dati fake

A volte i formattatori integrati non sono sufficienti. In questi casi, puoi creare i tuoi fornitori di dati. Ecco come:

  1. Crea una nuova classe che estende \Faker\Provider\Base.
  2. Aggiungi metodi per ogni tipo di dati che desideri generare. È possibile utilizzare altri formattatori per generare questi dati.
  3. Aggiungi il provider a Faker con il metodo addProvider(). Per esempio: $faker->addProvider(new MyCustomProvider($faker));

Ora puoi utilizzare i tuoi formattatori personalizzati proprio come utilizzeresti quelli integrati.

Integrazione di Laravel Faker con Laravel’s Factory

La funzionalità di factory di Laravel si integra bene con Faker. Ecco come puoi usarli insieme:

  • Come utilizzare Laravel Faker con Laravel’s Factory : nella definizione della tua factory, puoi utilizzare Faker per generare dati per ciascun attributo. Ad esempio, per creare una factory per un modello Utente, potresti fare:
$factory->define(App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
    ];
});
  • Creazione di una factory: puoi creare una nuova factory utilizzando il comand artisan make:factory. Ad esempio, php artisan make:factory UserFactory creerà una nuova fabbrica per il modello Utente.
  • Definizione degli stati di factory: gli stati di factory consentono di definire le variazioni di una factory. Ad esempio, potresti definire uno stato verified per la tua User factory che imposta l’attributo email_verified_at sulla data e l’ora correnti.

Esempi pratici di utilizzo di Laravel Faker

Ecco alcuni esempi di come è possibile utilizzare Laravel Faker per generare dati falsi:

  • Creazione di utenti falsi : con User Factory e Faker, puoi creare utenti falsi in questo modo: factory(App\User::class, 50)->create(); verranno creati 50 utenti con nomi e indirizzi email casuali.
  • Creazione di post falsi : se disponi di un modello Post e di una factory corrispondente, puoi creare post falsi per ciascun utente in questo modo:
App\User::all()->each(function ($user) {
    $user->posts()->saveMany(factory(App\Post::class, 10)->make());
});
  • Creazione di commenti falsi : allo stesso modo, puoi creare commenti falsi per ogni post in questo modo:
App\Post::all()->each(function ($post) {
    $post->comments()->saveMany(factory(App\Comment::class, 5)->make());
});

Letture Correlate

Ercole Palmeri

Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.