So führen Sie das Datenbank-Seeding in Laravel durch
In der Vergangenheit habe ich einen Artikel zum Seed einer Datenbank in PHP mit der Faker-Bibliothek veröffentlicht. Bei der Recherche zu diesem Thema habe ich festgestellt, dass Laravel dieselbe Bibliothek auch zum Seeding der Datenbank verwendet. Da ich einen Artikel zu diesem Thema für PHP geschrieben habe, habe ich mich entschlossen, auch einen Beitrag zum Laravel-Datenbank-Seeding zu schreiben. Dies liegt daran, dass Laravel einen eigenen Prozess zum Seeding der Datenbank verwendet.
Was ist Database Seeding?
Datenbank-Seeding bedeutet, dass Sie Ihre Datenbanktabellen programmgesteuert mit den Testdaten füllen. Mit diesem Ansatz kann man innerhalb weniger Minuten Tausende von Datensätzen in die Datenbank eingeben. Es ist ein effizienter Weg, anstatt es manuell zu tun. Vielleicht möchten Sie Dummy-Daten, um Ihre Anwendung zu testen, und das Seeding der Datenbank durch das Programm spart Ihnen eine Menge Zeit.
Faker-Bibliothek
Faker ist eine Open-Source-Bibliothek, die gefälschte Daten für die Datenbank Ihrer Anwendung generiert. Mit Faker kann man in wenigen Minuten Tausende von Einträgen in die Datenbank einfügen. Diese Bibliothek erspart Entwicklern eine langweilige Dateneingabe. Sie können fast jede Art von Daten erhalten, die Sie möchten. Die Bibliothek generiert eine gefälschte E-Mail, einen Namen, eine Handynummer, Wörter, Sätze, Absätze, Zufallszahlen usw. Sie können die Art der von ihnen bereitgestellten Daten in der Dokumentation lesen .
Laravel installiert diese Bibliothek im Kern. Das bedeutet, dass Sie es nicht separat installieren müssen. Lassen Sie uns jedoch einen Blick darauf werfen, wie Sie das Datenbank-Seeding in Laravel durchführen.
Einstieg
Um zu beginnen, werde ich eine ‘Kunden’-Tabelle mit den Spalten Name, E-Mail und Bio erstellen. Wir werden den Prozess des Seedings der einzelnen Tabelle sehen. Auf die gleiche Weise können Benutzer beliebig viele Tabellen mit einem Seeding versehen.
Erstellen Sie eine Migration für Kundentabelle mit dem Befehl:
php artisan make:migration create_customers_table
Öffnen Sie die Migrationsdatei und fügen Sie die Spalten wie unten gezeigt zur ‘up’-Methode hinzu.
public function up()
{
Schema::create('customers', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->text('bio');
$table->timestamps();
});
}
Führen Sie den Migrationsbefehl aus, der eine ‘customers’-Tabelle in Ihrer Datenbank erstellt.
php artisan migrate
Erstellen Sie als Nächstes ein Modell ‘Customer’, das der Tabelle ‘customers’ zugeordnet ist. Ab Laravel 8.x werden Ihre Modelle im Verzeichnis ‘App/Models’ erstellt. Für dieses Tutorial gehe ich davon aus, dass Sie Laravel 8.x verwenden. In der älteren Version von Laravel müssen Sie den Modellpfad anpassen.
php artisan make:model Customer
Datenbank-Seeding in Laravel
Das Seeding einer Datenbank in Laravel erfordert, dass Sie einige Schritte ausführen, nämlich Seeder schreiben, eine Modellfabrik erstellen und Seeder ausführen. Machen wir es nacheinander.
Seeder schreiben
Wenn Sie sich das Laravel-Dateisystem ansehen, dann bemerken Sie das Verzeichnis database/seeders
. Alle Seed-Klassen gehen in dieses Verzeichnis. Eine Seed-Klasse hat die run
Methode, von der aus Sie die Daten in die Tabelle einfügen können.
Erstellen Sie eine Seed-Klasse CustomerSeeder mit dem Befehl:
php artisan make:seeder CustomerSeeder
Nachdem Sie diesen Befehl ausgeführt haben, sollten Sie die CustomerSeeder.php
Datei sehen, die unter erstellt wurde database/seeders
. Öffnen Sie diese Datei und run
fügen Sie der Funktion den folgenden Code hinzu.
public function run()
{
AppModelsCustomer::factory()->count(50)->create()->each(function ($customer) {
$customer->save();
});
}
Hier rufe ich die Kundenfabrik auf, die wir im nächsten Schritt erstellen werden. Beachten Sie, dass ich den Wert 50 an die Methode "count" übergeben habe. Das bedeutet, dass 50 Zeilen in die Tabelle ‘Kunden’ eingefügt werden sollten. Passen Sie diesen Wert nach Belieben an.
Fabriken erstellen
Der Code, den ich geschrieben habe CustomerSeeder
, sucht nach einer Fabrik, um die Testdaten zu erhalten. Das bedeutet, dass wir eine Modellfabrik schaffen müssen. Ich werde der Fabrik einen Namen als CustomerFactory geben. Führen Sie den Befehl aus, um die Modellfactory zu generieren.
php artisan make:factory CustomerFactory --model=Customer
Dieser Befehl erstellt eine CustomerFactory.php
innerhalb des database/factories
Verzeichnisses. Öffnen Sie diese Datei und generieren Sie zur Definitionsmethode wie folgt Testdaten.
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'bio' => $this->faker->text,
];
}
Das obige Array gibt einen zufällig ausgewählten Namen, eine E-Mail und einen Text für die Bio zurück.
Laufende Sämaschinen
Wir haben alle mit der Sämaschine und der Fabrik eingestellt. Führen Sie nun unseren Seeder mit dem folgenden Befehl aus.
php artisan db:seed --class=CustomerSeeder
Überprüfen Sie Ihre ‘Kunden’-Tabelle und sie sollten die 50 Dummy-Einträge eingefügt haben.
Der obige Befehl führt einen einzelnen Seeder aus, den wir explizit übergeben haben. Angenommen, Sie möchten mehrere Seeder erstellen und alle mit einem einzigen Befehl ausführen. In solchen Fällen sollten Sie Ihre Seeder von der aus aufrufen, DatabaseSeeder
die sich im selben Verzeichnis befindet database/seeders
.
public function run()
{
$this->call(CustomerSeeder::class);
// call as many seeders you wish
}
Der Benutzer kann so viele Seeder nach seinen Anforderungen erstellen und über diese run
Methode aufrufen .
Führen Sie schließlich die Seeder mit dem folgenden Befehl aus.
php artisan db:seed
Es ruft alle Seeder aus der run
Methode auf und führt sie aus.
Ich hoffe, Sie verstehen das Datenbank-Seeding in Laravel. Ich würde gerne Ihre Gedanken und Vorschläge im Kommentarbereich unten hören.
Zum Thema passende Artikel
- PayPal Payments Pro-Integration in Laravel
- Erstellen Sie einen Honeypot für den Kampf gegen Formular-Spam in Laravel
- Hinzufügen von Google reCAPTCHA v3 zu Ihrer Laravel-Website