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.
php artisan make:seeder UserSeeder
Ergebnis: database/seeders/UserSeeder.php.
<? php
namespace Database\Seeders ;
use Illuminate\Database\ Seeder ;
class UserSeeder extends Seeder
{
/**
* Seeder ausführen
*/
public function run () : void
{
// Datenlogik hier
}
}
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
<? php
namespace Database\Seeders ;
use Illuminate\Database\ Seeder ;
use Illuminate\Support\Facades\ DB ;
use Illuminate\Support\Facades\ Hash ;
class UserSeeder extends Seeder
{
public function run () : void
{
DB :: table ( 'users' ) -> insert ([
[
'name' => 'Yamada Taro' ,
'email' => '[email protected] ' ,
'password' => Hash :: make ( 'password' ),
'created_at' => now (),
'updated_at' => now (),
],
[
'name' => 'Suzuki Hanako' ,
'email' => '[email protected] ' ,
'password' => Hash :: make ( 'password' ),
'created_at' => now (),
'updated_at' => now (),
],
]);
}
}
Mit Eloquent
use App\Models\ User ;
use Illuminate\Support\Facades\ Hash ;
public function run () : void
{
User :: create ([
'name' => 'Admin' ,
'email' => '[email protected] ' ,
'password' => Hash :: make ( 'password' ),
]);
}
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.
use App\Models\ User ;
use App\Models\ Post ;
public function run () : void
{
// 10 Benutzer erstellen
User :: factory ( 10 ) -> create ();
// Für jeden Benutzer 3 Beiträge
User :: factory ( 5 )
-> hasPosts ( 3 )
-> create ();
}
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.
<? php
namespace Database\Seeders ;
use Illuminate\Database\ Seeder ;
class DatabaseSeeder extends Seeder
{
public function run () : void
{
$this -> call ([
UserSeeder :: class ,
PostSeeder :: class ,
CommentSeeder :: class ,
]);
}
}
Die Reihenfolge entspricht der Übergabe. Wenn Fremdschlüssel im Spiel sind, seeden Sie referenzierte Tabellen zuerst (z. B. users → posts).
Seeder ausführen
Alle ausführen
Ruft DatabaseSeeder auf, der die in call() gelisteten Seeder abarbeitet.
Nur einen bestimmten Seeder
Mit --class.
php artisan db:seed --class=UserSeeder
Zusammen mit Migrationen
Mit migrate:fresh --seed legen Sie alle Tabellen neu an und seeden anschließend.
php artisan migrate:fresh --seed
Auf einen bestimmten Seeder beschränken via --seeder.
php artisan migrate:fresh --seed --seeder=UserSeeder
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.
php artisan db:seed --force
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.
<? php
namespace Database\Seeders ;
use Illuminate\Database\ Seeder ;
use Illuminate\Database\Console\Seeds\ WithoutModelEvents ;
class DatabaseSeeder extends Seeder
{
use WithoutModelEvents ;
public function run () : void
{
$this -> call ([
UserSeeder :: class ,
]);
}
}
Der Trait wirkt auch auf die per call() aufgerufenen Sub-Seeder.
Beispiel: Seeder einer Blog-Anwendung
Initialdaten für Nutzer und Beiträge:
// database/seeders/UserSeeder.php
class UserSeeder extends Seeder
{
public function run () : void
{
User :: factory ( 10 ) -> create ();
}
}
// database/seeders/PostSeeder.php
class PostSeeder extends Seeder
{
public function run () : void
{
// Jeder Nutzer bekommt 2–5 Beiträge
User :: all () -> each ( function ( $user ) {
Post :: factory ( rand ( 2 , 5 )) -> create ([
'user_id' => $user -> id ,
]);
});
}
}
// database/seeders/DatabaseSeeder.php
class DatabaseSeeder extends Seeder
{
public function run () : void
{
$this -> call ([
UserSeeder :: class ,
PostSeeder :: class , // nach users
]);
}
}
Ausführen:
php artisan migrate:fresh --seed
Nächste Schritte
Einstieg in Eloquent Nutzen Sie die geseedeten Daten in Ihren Eloquent-Abfragen.
Zuletzt geändert am 13. Juli 2026