Suche…
Bemerkungen
Durch das Seeding von Datenbanken können Sie Daten und allgemeine Testdaten in Ihre Datenbank einfügen. Standardmäßig gibt es eine DatabaseSeeder
Klasse unter database/seeds
.
Sämaschinen können mit ausgeführt werden
php artisan db:seed
Oder wenn Sie nur eine Klasse bearbeiten möchten
php artisan db:seed --class=TestSeederClass
Wie bei allen handwerklichen Befehlen haben Sie Zugriff auf eine Vielzahl von Methoden, die Sie in der API-Dokumentation finden
Daten einfügen
Es gibt verschiedene Möglichkeiten, Daten einzufügen:
DB Facade verwenden
public function run()
{
DB::table('users')
->insert([
'name' => 'Taylor',
'age' => 21
]);
}
Über das Instantiieren eines Modells
public function run()
{
$user = new User;
$user->name = 'Taylor';
$user->save();
}
Verwenden Sie die Create-Methode
public function run()
{
User::create([
'name' => 'Taylor',
'age' => 21
]);
}
Mit fabrik
public function run()
{
factory(App\User::class, 10)->create();
}
&& alte Daten löschen und Auto-Inkrement zurücksetzen
public function run()
{
DB::table('users')->delete();
DB::unprepared('ALTER TABLE users AUTO_INCREMENT=1;');
factory(App\User::class, 200)->create();
}
Weitere Informationen zum Einfügen / Aktualisieren von Daten finden Sie im Beispiel für persistent .
Andere Sämaschinen anrufen
Innerhalb Ihrer DatabaseSeeder
Klasse können Sie andere Sämaschinen aufrufen
$this->call(TestSeeder::class)
Auf diese Weise können Sie eine Datei aufbewahren, in der Sie Ihre Sämaschinen leicht finden können. Beachten Sie, dass Sie die Reihenfolge Ihrer Anrufe in Bezug auf Fremdschlüsseleinschränkungen beachten müssen. Sie können nicht auf eine Tabelle verweisen, die noch nicht existiert.
Seeder anlegen
Zum Erstellen von Sämaschinen können Sie den Befehl make:seeder
Artisan verwenden. Alle generierten Setzer werden im database/seeds
Verzeichnis abgelegt.
$ php artisan make:seeder MoviesTableSeeder
Erzeugte Seeders enthalten eine Methode: run
. Sie können mit dieser Methode Daten in Ihre Datenbank einfügen.
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class MoviesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
App\Movie::create([
'name' => 'A New Hope',
'year' => '1977'
]);
App\Movie::create([
'name' => 'The Empire Strikes Back',
'year' => '1980'
]);
}
}
Im Allgemeinen möchten Sie alle Sämaschinen innerhalb der DatabaseSeeder
Klasse aufrufen.
Wenn Sie mit dem Schreiben der Sämaschinen fertig sind, verwenden Sie den Befehl db:seed
. Dadurch wird die run
Funktion von DatabaseSeeder
run
.
$ php artisan db:seed
Sie können auch angeben, dass eine bestimmte Seeder-Klasse mit der Option --class
einzeln ausgeführt werden --class
.
$ php artisan db:seed --class=UserSeeder
Wenn Sie alle Migrationen rückgängig machen und erneut ausführen möchten, und dann erneut starten:
$ php artisan migrate:refresh --seed
Der Befehl
migrate:refresh --seed
ist eine Verknüpfung zu diesen 3 Befehlen:$ php artisan migrate:reset # rollback all migrations $ php artisan migrate # run migrations $ php artisan db:seed # run seeders
Sichere Nachsaat
Möglicherweise möchten Sie Ihre Datenbank erneut säen, ohne die zuvor erstellten Samen zu beeinflussen. Zu diesem Zweck können Sie firstOrCreate
in Ihrem Seeder verwenden:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
Dann können Sie die Datenbank starten:
php artisan db:seed
Wenn Sie später einen anderen Mitarbeitertyp hinzufügen möchten, können Sie den neuen Mitarbeiter in derselben Datei hinzufügen:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
EmployeeType::firstOrCreate([
'type' => 'secretary',
]);
Und samen Sie Ihre Datenbank erneut ohne Probleme:
php artisan db:seed
Beachten Sie beim ersten Anruf, dass Sie den Datensatz abrufen, aber nichts dagegen tun.