Skip to main content

Wat is seeding

Seeding is het mechanisme waarmee je voorbeeld- of initiële data in de database laadt. Bij het opzetten van een ontwikkelomgeving of in geautomatiseerde tests heb je een database nodig die al data bevat. Elke keer handmatig data invoeren is omslachtig, dus bundel je dit met seeders in een vorm die herhaaldelijk uitvoerbaar is. Seederklassen staan in de map database/seeders. Standaard is er een klasse DatabaseSeeder aanwezig.

Een seeder maken

Met het Artisan-commando make:seeder genereer je een nieuwe seederklasse.
Het gegenereerde bestand wordt geplaatst in database/seeders/UserSeeder.php.

Een seeder implementeren

In de methode run() schrijf je de logica om data in te voegen. Je kunt invoegen via de DB-facade of via Eloquent-modellen.

De DB-facade gebruiken

Eloquent-modellen gebruiken

Tijdens het seeden is de mass-assignmentbescherming automatisch uitgeschakeld. Je kunt data invoegen zonder je zorgen te maken over de instellingen van $fillable of $guarded.

Combineren met model factories

Heb je grote hoeveelheden testdata nodig, dan is de combinatie met model factories handig. Met factories genereer je in één keer willekeurige dummy-data.
Zie de documentatie over Eloquent-factories voor gedetailleerd gebruik van factories.

DatabaseSeeder gebruiken

De DatabaseSeeder is het startpunt waarmee je meerdere seeders centraal beheert. Met de methode call() geef je op welke seeders worden uitgevoerd.
De seeders worden uitgevoerd in de volgorde waarin je ze aan call() doorgeeft. Zijn er foreign key-constraints, kies dan een volgorde waarin de tabellen waarnaar wordt verwezen eerst worden geseed (bijvoorbeeld usersposts).

Seeders uitvoeren

Alle seeders uitvoeren

De DatabaseSeeder wordt aangeroepen en vervolgens worden de via call() opgegeven seeders op volgorde uitgevoerd.

Alleen een specifieke seeder uitvoeren

Met de optie --class geef je de uit te voeren seederklasse op.

Tegelijk met migraties uitvoeren

Voeg de optie --seed toe aan het commando migrate:fresh om alle tabellen opnieuw aan te maken en daarna in één keer te seeden.
Wil je alleen een specifieke seeder uitvoeren, gebruik dan de optie --seeder.
migrate:fresh verwijdert alle tabellen en maakt ze opnieuw aan. Alle bestaande data gaat verloren; gebruik dit dus niet in productie.

Uitvoeren in productie

Probeer je te seeden in een productieomgeving, dan verschijnt er een bevestigingsprompt. Om zonder bevestiging uit te voeren gebruik je de vlag --force.
Seeden in productie kan leiden tot het overschrijven of verliezen van data. Maak vóór het uitvoeren altijd een back-up.

Modelevents onderdrukken

Wil je voorkomen dat tijdens het seeden modelevents (creating, created enz.) worden afgevuurd, gebruik dan de trait WithoutModelEvents.
Dit geldt ook voor kindseeders die via call() worden uitgevoerd.

Praktijkvoorbeeld: seeders voor een blogapp

Een voorbeeld waarin de initiële data voor een blogapp met gebruikers en posts wordt opgezet.
Uitvoering:

Volgende stap

Introductie Eloquent

Leer hoe je de met seeders geladen data ophaalt en bewerkt met het Eloquent ORM.
Laatst gewijzigd op 6 september 2026