Articoli

Laravel DataBase Seeder

Laravel introduce seeder per la creazione di dati di test, utili per verificare il progetto, con un utente amministratore e i dati predefiniti nel database.

Tempo di lettura stimato: 5 minuti

Quando iniziamo un nuovo progetto, e non è ancora disponibile la pagina di registrazione, dobbiamo iniziare comunque a lavorare e avere delle informazioni nel database. I Seeder di Laravel ci aiutano in questa fase di lavoro, in modo tale da poter iniziare a popolare il DataBase con i dati minimi di configurazione.

Possiamo utilizzare i Seeder ogni qualvolta ci necessita popolare il DataBase con dati di test, o per creare particolari condizioni di informazioni disponibili nel DB e quindi provare il sistema.

Cos’è Database Seeder in Laravel

Laravel fornisce un metodo semplice per eseguire il seeding dei dati di test in un database utilizzando le classi seeder. È possibile eseguire il seeding del database in Laravel per aggiungere dati falsi nel database a scopo di test.

In altre parole, il seeder di Laravel è una classe che ti permette di popolare il tuo database con i dati iniziali. È particolarmente utile durante lo sviluppo o quando si imposta un nuovo progetto. I seeder ti aiutano a creare dati coerenti e prevedibili per test, scopi dimostrativi o durante la distribuzione della tua applicazione.

Vantaggi dall’uso dei Seeder

  • Inizializzazione del database
    • I seeder ti consentono di inizializzare il tuo database con dati predefiniti. Invece di inserire manualmente i record, puoi automatizzare questo processo;
    • Quando esegui il comando Artisan db:seed, Laravel esegue il metodo run all’interno della classe seeder, popolando le tabelle del database con i dati specificati;
  • Dati coerenti per test e sviluppo
    • Durante lo sviluppo, spesso sono necessari dati di esempio per testare le funzionalità dell’applicazione;
    • I seeders forniscono un modo per creare dati coerenti in diversi ambienti (locale, staging, produzione);
    • Ad esempio, puoi fare il seeding di account utente, prodotti, categorie o qualsiasi altro dato rilevante;
  • Dati dimostrativi per presentazioni
    • Quando si dimostra la propria applicazione a clienti, investitori o stakeholder, disporre di dati realistici è essenziale;
    • I seeder ti consentono di generare rapidamente dati dimostrativi che mostrano le funzionalità della tua applicazione;
  • Seeding del database per i test
    • Il framework di test di Laravel supporta il seeding del database;
    • Puoi fare il seeding del database con dati specifici prima di eseguire i test, garantendo uno stato noto, corretto, per ogni caso di test;
    • Ciò aiuta a mantenere la coerenza ed evita errori imprevisti dei test dovuti a dati mancanti;
  • Popolamento di tabelle di ricerca e dati di riferimento
    • I seeder sono ideali per popolare tabelle di ricerca, come codici paese, valute o altri dati di riferimento statici;
    • Queste tabelle cambiano raramente e possono essere seminate una volta durante la configurazione dell’applicazione;
  • Creazione di relazioni e strutture dati complesse
    • I seeder consentono di definire le relazioni tra i record;
    • Ad esempio, puoi eseguire il seeding degli utenti insieme a post, commenti e altri dati correlati associati;
    • Ciò aiuta a testare le relazioni e garantisce l’integrità dei dati;
  • Automatizzazione della generazione dei dati
    • L’inserimento manuale dei dati può richiedere molto tempo ed è soggetto a errori;
    • Con i seeders è possibile utilizzare le factories per generare automaticamente grandi quantità di dati;
    • Definisci le factories per i tuoi modelli e usale nei tuoi seeders;
  • Seeding del database in produzione
    • Anche se non è consigliabile eseguire il seeding frequente dei database di produzione, potrebbero esserci scenari in cui è necessario aggiungere dati iniziali;
    • Utilizzare i seeders con cautela durante la produzione per evitare di sovrascrivere i dati esistenti;

Esempio di Database Seeder in Laravel

Per prima cosa creiamo un seeder con il comando seguente:

php artisan make:seeder UserSeeder

Dopo aver eseguito il comando, avremo un file UserSeeder.php nella cartella seeds. Le classi seed sono memorizzate nella directory database/seeders.

Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.
namespace Database\Seeders;
 
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
 
class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        User::create([
            'name' => 'John Jackson',
            'email' => 'john@jackson.com',
            'mobile' => '123456789',
            'password' => Hash::make('john@123')
        ]);
    }
}

Vediamo ora come possiamo richiamare altri seeder. Il metodo call viene utilizzato per eseguire classi seed aggiuntive all’interno della classe DatabaseSeeder. Ti consente di suddividere il seeding del database in più file in modo che nessuna singola classe seeder diventi troppo grande. Il metodo call accetta un array di classi seeder che devono essere eseguite.

<?php
  
use Illuminate\Database\Seeder;
   
class DatabaseSeeder extends Seeder
{
    public function run()
    {
         $this->call([
         UserSeeder::class,
         PostSeeder::class,
     ]);
    }
}

Comando per eseguire il seeder

php artisan db:seed

Comando per eseguire un seeder singolarmente

php artisan db:seed –class=UserSeeder

Puoi anche eseguire il seeding del database utilizzando il comando migrate:fresh in combinazione con l’opzione –seed. Questo comando elimina tutte le tabelle, esegue nuovamente tutte le migrazioni e ricostruisce il database.

php artisan migrate:fresh --seed

Letture Correlate

Ercole Palmeri

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