Skip to main content

Was ist Seeding

Seeding ist ein Mechanismus, um Beispiel- oder Ausgangsdaten in Ihre Datenbank zu schreiben. Beim Einrichten der Entwicklungsumgebung oder bei automatisierten Tests benötigen Sie oft eine Datenbank in einem vordefinierten Zustand. Statt jedes Mal manuell zu befüllen, bündeln Sie das Vorgehen in Seeder-Klassen. Seeder liegen unter database/seeders. Standardmäßig existiert die Klasse DatabaseSeeder.

Seeder erzeugen

Neue Seeder erzeugen Sie mit make:seeder.
Ergebnis: database/seeders/UserSeeder.php.

Seeder implementieren

Die Logik zur Datenerzeugung schreiben Sie in run(). Sie können sowohl die DB-Facade als auch Eloquent verwenden.

Mit der DB-Facade

Mit Eloquent

Während des Seedings ist der Mass-Assignment-Schutz automatisch deaktiviert. $fillable und $guarded müssen Sie nicht beachten.

Kombination mit Model Factories

Für viele Testdaten sind Model Factories ideal. Sie erzeugen zufällige Dummy-Daten in Massen.
Details zu Factories finden Sie in der Dokumentation zu Eloquent-Factories.

Der DatabaseSeeder

DatabaseSeeder ist der Einstiegspunkt, um mehrere Seeder zu koordinieren. Mit call() bestimmen Sie, welche ausgeführt werden.
Die Reihenfolge entspricht der Übergabe. Wenn Fremdschlüssel im Spiel sind, seeden Sie referenzierte Tabellen zuerst (z. B. usersposts).

Seeder ausführen

Alle ausführen

Ruft DatabaseSeeder auf, der die in call() gelisteten Seeder abarbeitet.

Nur einen bestimmten Seeder

Mit --class.

Zusammen mit Migrationen

Mit migrate:fresh --seed legen Sie alle Tabellen neu an und seeden anschließend.
Auf einen bestimmten Seeder beschränken via --seeder.
migrate:fresh löscht und erstellt alle Tabellen neu – bestehende Daten sind weg. Nicht in Produktion nutzen.

Ausführung in Produktion

In Produktion erscheint eine Bestätigungsabfrage. Mit --force überspringen Sie sie.
Seeding in Produktion kann bestehende Daten überschreiben. Legen Sie vorher immer ein Backup an.

Modell-Events unterdrücken

Um zu verhindern, dass Modell-Events wie creating/created beim Seeding gefeuert werden, nutzen Sie den Trait WithoutModelEvents.
Der Trait wirkt auch auf die per call() aufgerufenen Sub-Seeder.

Beispiel: Seeder einer Blog-Anwendung

Initialdaten für Nutzer und Beiträge:
Ausführen:

Nächste Schritte

Einstieg in Eloquent

Nutzen Sie die geseedeten Daten in Ihren Eloquent-Abfragen.
Zuletzt geändert am 13. Juli 2026