Come eseguire il seeding del database in Laravel
In passato, ho pubblicato un articolo How to Seed Database in PHP using Faker Library. Durante la ricerca su questo argomento, ho scoperto che Laravel utilizza anche la stessa libreria per il seeding del database. Poiché ho scritto un articolo su questo argomento per PHP, ho deciso di scrivere un post anche sul seeding del database Laravel. Questo perché Laravel utilizza il proprio processo per eseguire il seeding del database.
Che cos’è il seeding del database?
Il seeding del database significa riempire le tabelle del database con i dati di test a livello di codice. Con questo approccio, si possono inserire migliaia di record nel database in pochi minuti. È un modo efficiente piuttosto che farlo manualmente. Potresti volere un dato fittizio per testare la tua applicazione e il seeding del database attraverso il programma ti fa risparmiare un sacco di tempo.
Libreria Faker
Faker è una libreria open source che genera dati falsi per il database della tua applicazione. Usando Faker, si possono inserire migliaia di voci nel database in un paio di minuti. Questa libreria salva un noioso lavoro di inserimento dati per gli sviluppatori. Puoi ottenere quasi tutti i tipi di dati che desideri. La biblioteca genera un’e-mail falsa, nome, numero di cellulare, parole, frasi, paragrafi, numeri casuali, ecc. Puoi leggere il tipo di dati che forniscono sulla documentazione.
Laravel installa questa libreria al suo interno. Ciò significa che non è necessario installarlo separatamente. Detto questo, diamo un’occhiata a come eseguire il seeding del database in Laravel.
Iniziare
Per iniziare, creerò una tabella "clienti" con le colonne nome, email e biografia. Vedremo il processo di seeding della singola tabella. Allo stesso modo, gli utenti possono eseguire il seeding di tutte le tabelle che desiderano.
Crea una tabella di migrazione per i clienti utilizzando il comando:
php artisan make:migration create_customers_table
Apri il file di migrazione e aggiungi le colonne al metodo "up" come mostrato di seguito.
public function up()
{
Schema::create('customers', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->text('bio');
$table->timestamps();
});
}
Esegui il comando migrate che creerà una tabella "clienti" nel tuo database.
php artisan migrate
Successivamente, crea un modello "Cliente" che corrisponda alla tabella "Clienti". A partire da Laravel 8.x i tuoi modelli verranno creati all’interno della directory "App/Modelli". Per questo tutorial, presumo che tu stia usando Laravel 8.x. Nella versione precedente di Laravel, è necessario modificare il percorso del modello.
php artisan make:model Customer
Semina database in Laravel
Il seeding di un database in Laravel richiede di seguire alcuni passaggi che sono la scrittura di seeders, la creazione di una fabbrica di modelli e l’esecuzione di seeders. Facciamolo uno per uno.
Seminatrici di scrittura
Se guardi il filesystem Laravel, noterai la directory database/seeders
. Tutte le classi seed andranno all’interno di questa directory. Una classe seed ha il run
metodo da cui è possibile inserire i dati nella tabella.
Crea una classe seme CustomerSeeder usando il comando:
php artisan make:seeder CustomerSeeder
Dopo aver eseguito questo comando, dovresti vedere il CustomerSeeder.php
file creato in database/seeders
. Apri questo file e alla run
funzione aggiungi il codice sottostante.
public function run()
{
AppModelsCustomer::factory()->count(50)->create()->each(function ($customer) {
$customer->save();
});
}
Qui sto chiamando la fabbrica del Cliente che creeremo nel passaggio successivo. Nota che ho passato il valore come 50 al metodo ‘count’. Significa che 50 righe devono essere inserite nella tabella "clienti". Regola questo valore come desideri.
Creazione di fabbriche
Il codice che ho scritto CustomerSeeder
cercherà una fabbrica per ottenere i dati del test. Significa che dobbiamo creare una fabbrica modello. Darò un nome alla fabbrica come CustomerFactory. Eseguire il comando per generare la fabbrica del modello.
php artisan make:factory CustomerFactory --model=Customer
Questo comando creerà un CustomerFactory.php
all’interno della database/factories
directory. Aprire questo file e al metodo di definizione generare dati di prova come segue.
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'bio' => $this->faker->text,
];
}
L’array sopra restituisce un nome, un’e-mail e un testo scelti a caso per la biografia.
Seminatrici in esecuzione
Abbiamo impostato tutto con la seminatrice e la fabbrica. Ora esegui il nostro seeder usando il comando seguente.
php artisan db:seed --class=CustomerSeeder
Controlla la tua tabella ‘clienti’ e dovrebbe avere le 50 voci fittizie inserite.
Il comando precedente esegue un singolo seeder che abbiamo passato esplicitamente. Supponiamo che tu voglia creare più seeders ed eseguirli tutti utilizzando un singolo comando. In tali casi, dovresti chiamare i tuoi seeders dal DatabaseSeeder
quale si trova nella stessa directory database/seeders
.
public function run()
{
$this->call(CustomerSeeder::class);
// call as many seeders you wish
}
L’utente può creare tanti seeders in base alle proprie esigenze e chiamarli da questo run
metodo.
Infine, esegui i seeders usando il comando seguente.
php artisan db:seed
Chiamerà tutti i seeders dal run
metodo e lo eseguirà.
Spero che tu capisca sul seeding del database in Laravel. Mi piacerebbe sentire i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.
articoli Correlati
- Integrazione PayPal Payments Pro in Laravel
- Crea Honeypot per combattere lo spam dei moduli in Laravel
- Aggiunta di Google reCAPTCHA v3 al tuo sito web Laravel