Skip to main content

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 directory database/seeders. Di default è già presente la classe DatabaseSeeder.

Creazione di un seeder

Genera una nuova classe seeder con il comando Artisan make:seeder.
Il file generato viene collocato in database/seeders/UserSeeder.php.

Implementazione del seeder

Scrivi la logica di inserimento dei dati all’interno del metodo run(). 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.
Per i dettagli sull’uso delle factory consulta la documentazione delle factory Eloquent.

Come usare DatabaseSeeder

DatabaseSeeder è il punto di ingresso per gestire in modo unificato più seeder. Con il metodo call() specifichi quali seeder eseguire.
I seeder vengono eseguiti nell’ordine passato a call(). In presenza di vincoli di chiave esterna, ordina in modo da seedare prima le tabelle referenziate (ad esempio usersposts).

Esecuzione dei seeder

Eseguire tutti i seeder

Viene invocato 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.
Se vuoi eseguire solo un seeder specifico usa l’opzione --seeder.
migrate:fresh elimina e ricrea tutte le tabelle. Tutti i dati esistenti andranno persi, quindi non usarlo in produzione.

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.
Il seeding in produzione può causare sovrascritture o perdite di dati. Esegui sempre un backup prima di procedere.

Soppressione degli eventi del modello

Se vuoi impedire che durante il seeding vengano emessi eventi del modello (creating, created, ecc.), usa il trait WithoutModelEvents.
Si applica anche ai seeder figli eseguiti tramite call().

Esempio pratico: seeder per un’app blog

Esempio di configurazione dei dati iniziali per un’applicazione blog con utenti e post.
Passi di esecuzione:

Prossimi passi

Introduzione a Eloquent

Impara a recuperare e manipolare con Eloquent ORM i dati inseriti tramite i seeder.
Ultima modifica il 13 luglio 2026