Datenfüllung
- Einführung
- Geschrieben Sämaschinen
- rufen Sie andere Sämaschinen
- unter Verwendung der Modellfabrik
an laufen Seeders
Laravel enthält eine Shim-Klasse, die Tests für Ihre Datenbank füllen kann Daten. Alle Füllklassen werden im Verzeichnis
abgelegt. Sie können der Füllklasse einen beliebigen Namen geben, es wird jedoch empfohlen, einer Namenskonvention wie zu folgen. Normalerweise definiert Laravel standardmäßig eine database/seeds
-Klasse. Über diese Klasse können Sie mit der UsersTableSeeder
-Methode andere Seed-Klassen ausführen, um die Reihenfolge der Datenfüllung zu steuern. DatabaseSeeder
call
Seeder schreiben
Führen make:seeder
diesen Artisan-Befehl aus, um den Seeder zu generieren. Die vom Framework generierten Seeder werden im Verzeichnis database/seeds
abgelegt.
php artisan make:seeder UsersTableSeeder
Eine Seeder-Klasse enthält nur eine Standardmethode: run
. Diese Methode wird aufgerufen, wenn der Befehl db:seed
Artisan ausgeführt wird. In der run
-Methode können Sie nach Bedarf Daten in die Datenbank einfügen. Sie können Daten auch manuell mit dem Query Builder oder der Eloquent Model Factory einfügen.
{tip} Der Stapelzuweisungsschutz wird automatisch deaktiviert, wenn Daten ausgefüllt werden.
Fügen Sie wie unten gezeigt eine Dateneinfügungsanweisung in der Methode DatabaseSeeder
in der Standardklasse run
hinzu:
<?php use Illuminate\Support\Str; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; class DatabaseSeeder extends Seeder{ /** * Run the database seeds. * * @return void */ public function run() { DB::table('users')->insert([ 'name' => Str::random(10), 'email' => Str::random(10).'@gmail.com', 'password' => bcrypt('secret'), ]); } }
{tip} Sie befinden sich in
run
Sie können Typen in der Methodensignatur verwenden, um die benötigten Abhängigkeiten einzuschränken. Sie werden automatisch vom Laravel-Servicecontainer gelöst.
Verwendung einer Modellfabrik
Natürlich ist das manuelle Ausfüllen bestimmter Eigenschaften für jedes Modell mühsam. Alternativ können Sie eine Modellfabrik verwenden, um auf einfache Weise große Mengen an Datenbankdaten zu generieren. Lesen Sie zunächst die Dokumentation zur Modellfabrik, um zu erfahren, wie Sie eine Fabrikdatei definieren. Sobald Sie Ihre Fabrikdatei definiert haben, können Sie die Hilfsfunktion factory
verwenden, um Daten in die Datenbank einzufügen.
Erstellen Sie beispielsweise 50 Benutzer und erstellen Sie eine Zuordnung für jeden Benutzer:
/** * 运行数据库填充。 * * @return void */ public function run(){ factory(App\User::class, 50)->create()->each(function ($u) { $u->posts()->save(factory(App\Post::class)->make()); }); }
Andere Seeder anrufen
In der Klasse DatabaseSeeder
können Sie call
verwenden Methode zum Ausführen anderer Seed-Klassen. Verwenden Sie die Methode call
, um die Datenpopulation in mehrere Dateien aufzuteilen, damit ein einzelner Seeder nicht extrem groß wird. Übergeben Sie einfach den Namen der Seeder-Klasse, die Sie ausführen möchten:
/** * 运行数据库 seeds。 * * @return void */ public function run(){ $this->call([ UsersTableSeeder::class, PostsTableSeeder::class, CommentsTableSeeder::class, ]); }
Running Seeders
Vervollständigen Sie die Seeder-Klasse Nach dem Schreiben müssen Sie möglicherweise den Befehl dump-autoload
verwenden, um Composer neu zu generieren Autoloader:
composer dump-autoload
Jetzt können Sie Artisan-Befehle db:seed
verwenden, um die Datenbank zu füllen. Standardmäßig führt der Befehl db:seed
die Klasse DatabaseSeeder
aus, die zum Aufrufen anderer Seed-Klassen verwendet werden kann. Sie können jedoch auch die Option --class
verwenden, um eine bestimmte Seeder-Klasse anzugeben:
php artisan db:seed php artisan db:seed --class=UsersTableSeeder
Sie können die Datenbank auch mit dem Befehl migrate:refresh
füllen, wodurch alle Migrationen zurückgesetzt und erneut ausgeführt werden. Mit diesem Befehl kann die Datenbank neu erstellt werden:
php artisan migrate:refresh --seed