I seeder
I seeder rappresentano l'altra faccia della medaglia delle migration e si occupano dell'inserimento di dati temporanei nel database. Questi permettono di avere dei dati di test caricati sul database a scopo dimostrativo. A differenza di quanto accade con le migration, data la loro natura i dati inseriti dai seeder non devono rappresentare informazioni utili per il setup dell'applicazione.
Come per le migration è possibile creare un nuovo seeder tramite un'istruzione inviata da linea di comando sulla base della seguente sintassi:
php artisan make:seeder NomeDelSeeder
I seeder sono classi PHP ospitate nella cartella database/seeds
che presentano un unico metodo run
che dovrà contenere la logica per l'inserimento dei dati di test. Questi ultimi possono essere inseriti sia attraverso del codice ad hoc che tramite factory.
Per il primo caso è sufficiente sfruttare le API query builder o direttamente Eloquent per l'inserimento di nuovi record:
DB::table('my_first_table')->insert([
'name' => str_random(10),
'age' => rand(10,40)
]);
Nel caso fosse necessario inserire una mole di dati più corposa possiamo utilizzare le Model Factory.
Model Factory
Le Model Factory permettono di definire, per ciascun modello dell'applicazione, logiche per la definizione di oggetti partendo da dei modelli fake, cioè a solo scopo di test. Tramite la libreria Faker
, inclusa direttamente in Laravel, sarà possibile creare oggetti sempre diversi in pochissimo tempo.
Le factory vengono definite all'interno della cartella denominata database/factories
e sono composte di fatto da una singola callback, utile a definire la struttura dei modelli.
$factory->define(App\Album::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'year' => $faker->year,
'track_count' => rand(5,15)
];
});
Una volta definita la factory, sarà possibile invocarla all'interno del seeder tramite l'helper factory
:
factory(App\Album::class, 50)->create(); //50 album creati con un unico comando.
Invocare i seeder
Per eseguire i seeder la prima cosa da fare è quella di aggiungere il riferimento all'interno della classe che funge da entry point: DatabaseSeeder
. Grazie al metodo call
possiamo aggiungere tanti seeder quanti ne desideriamo.
Una volta fatto ciò, possiamo lanciare il comando
php artisan seed
per invocare tutti i seeder configurati. Tramite l'istruzione
php artisan db:seed --class=MySeeder
possiamo poi limitare l'esecuzione ad un solo seeder.
Con questo capitolo si chiude la parte teorica dedicata a Eloquent, nel prossimo sfrutteremo le competenze acquisite per incrementare le funzionalità dell'applicazione "Biblios".