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 mapdatabase/seeders. Standaard is er een klasse DatabaseSeeder aanwezig.
Een seeder maken
Met het Artisan-commandomake:seeder genereer je een nieuwe seederklasse.
database/seeders/UserSeeder.php.
Een seeder implementeren
In de methoderun() 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.DatabaseSeeder gebruiken
DeDatabaseSeeder is het startpunt waarmee je meerdere seeders centraal beheert. Met de methode call() geef je op welke seeders worden uitgevoerd.
call() doorgeeft. Zijn er foreign key-constraints, kies dan een volgorde waarin de tabellen waarnaar wordt verwezen eerst worden geseed (bijvoorbeeld users → posts).
Seeders uitvoeren
Alle seeders uitvoeren
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.
--seeder.
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.
Modelevents onderdrukken
Wil je voorkomen dat tijdens het seeden modelevents (creating, created enz.) worden afgevuurd, gebruik dan de trait WithoutModelEvents.
call() worden uitgevoerd.
Praktijkvoorbeeld: seeders voor een blogapp
Een voorbeeld waarin de initiële data voor een blogapp met gebruikers en posts wordt opgezet.Volgende stap
Introductie Eloquent
Leer hoe je de met seeders geladen data ophaalt en bewerkt met het Eloquent ORM.