Cos’è il seeding
Il seeding è il meccanismo per inserire nel database dati di esempio o dati iniziali. Nella configurazione di ambienti di sviluppo e nei test automatici serve avere dati già presenti. Poiché inserire manualmente i dati ogni volta è oneroso, si raccolgono in seeder eseguibili ripetutamente. Le classi seeder si trovano nella directorydatabase/seeders. Di default è già presente la classe DatabaseSeeder.
Creazione di un seeder
Genera una nuova classe seeder con il comando Artisanmake:seeder.
database/seeders/UserSeeder.php.
Implementazione del seeder
Scrivi la logica di inserimento dei dati all’interno del metodorun(). Puoi usare la facade DB oppure i modelli Eloquent.
Usando la facade DB
Usando i modelli Eloquent
Durante l’esecuzione del seeding la protezione da mass assignment viene disabilitata automaticamente. Puoi inserire dati senza preoccuparti delle impostazioni di
$fillable o $guarded.Combinazione con le model factory
Quando servono grandi quantità di dati di test, è utile combinare i seeder con le model factory. Con le factory puoi generare in blocco dati fittizi casuali.Come usare DatabaseSeeder
DatabaseSeeder è il punto di ingresso per gestire in modo unificato più seeder. Con il metodo call() specifichi quali seeder eseguire.
call(). In presenza di vincoli di chiave esterna, ordina in modo da seedare prima le tabelle referenziate (ad esempio users → posts).
Esecuzione dei seeder
Eseguire tutti i seeder
DatabaseSeeder e, da lì, vengono eseguiti in ordine i seeder specificati con call().
Eseguire solo un seeder specifico
Con l’opzione--class puoi specificare la classe seeder da eseguire.
Esecuzione insieme alle migration
Aggiungendo l’opzione--seed al comando migrate:fresh, puoi ricreare tutte le tabelle e poi eseguire in blocco il seeding.
--seeder.
Esecuzione in produzione
Se provi a eseguire il seeding in produzione viene mostrato un prompt di conferma. Per eseguirlo senza conferma usa il flag--force.
Soppressione degli eventi del modello
Se vuoi impedire che durante il seeding vengano emessi eventi del modello (creating, created, ecc.), usa il trait WithoutModelEvents.
call().
Esempio pratico: seeder per un’app blog
Esempio di configurazione dei dati iniziali per un’applicazione blog con utenti e post.Prossimi passi
Introduzione a Eloquent
Impara a recuperare e manipolare con Eloquent ORM i dati inseriti tramite i seeder.