Zoeken…
Opmerkingen
Met database seeding kunt u gegevens, algemene testgegevens in uw database invoegen. Standaard is er een klasse DatabaseSeeder
onder database/seeds
.
Lopende zaaimachines kunnen worden gedaan met
php artisan db:seed
Of als u slechts één klasse wilt verwerken
php artisan db:seed --class=TestSeederClass
Zoals met alle ambachtelijke commando's, heb je toegang tot een breed scala aan methoden die te vinden zijn in de api-documentatie
Gegevens invoegen
Er zijn verschillende manieren om gegevens in te voegen:
Gebruik van de DB Facade
public function run()
{
DB::table('users')
->insert([
'name' => 'Taylor',
'age' => 21
]);
}
Via een model instantiëren
public function run()
{
$user = new User;
$user->name = 'Taylor';
$user->save();
}
Met de methode create
public function run()
{
User::create([
'name' => 'Taylor',
'age' => 21
]);
}
Fabriek gebruiken
public function run()
{
factory(App\User::class, 10)->create();
}
Seeding && oude gegevens verwijderen en auto-increment resetten
public function run()
{
DB::table('users')->delete();
DB::unprepared('ALTER TABLE users AUTO_INCREMENT=1;');
factory(App\User::class, 200)->create();
}
Zie het Persistent- voorbeeld voor meer informatie over het invoegen / bijwerken van gegevens.
Andere seeders bellen
Binnen uw klasse DatabaseSeeder
kunt u andere seeders oproepen
$this->call(TestSeeder::class)
Hiermee kunt u één bestand bewaren waar u gemakkelijk uw seeders kunt vinden. Houd er rekening mee dat u aandacht moet besteden aan de volgorde van uw oproepen met betrekking tot beperkingen van externe sleutels. U kunt niet verwijzen naar een tabel die nog niet bestaat.
Een zaaimachine maken
Om seeders te maken, kunt u de opdracht make:seeder
Artisan gebruiken. Alle gegenereerde seeders worden in de database/seeds
directory geplaatst.
$ php artisan make:seeder MoviesTableSeeder
Gegenereerde seeders bevatten één methode: run
. U kunt op deze manier gegevens in uw database invoegen.
<?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'
]);
}
}
Over het algemeen wilt u al uw seeders in de klasse DatabaseSeeder
aanroepen.
Als je klaar bent met het schrijven van de seeders, gebruik je het commando db:seed
. Hiermee wordt de runfunctie van DatabaseSeeder
run
.
$ php artisan db:seed
U kunt ook opgeven om een specifieke seeder-klasse uit te voeren die afzonderlijk moet worden uitgevoerd met de optie --class
.
$ php artisan db:seed --class=UserSeeder
Als u alle migraties wilt terugdraaien en opnieuw wilt uitvoeren en vervolgens opnieuw wilt gaan:
$ php artisan migrate:refresh --seed
De opdracht
migrate:refresh --seed
is een snelkoppeling naar deze 3 opdrachten:$ php artisan migrate:reset # rollback all migrations $ php artisan migrate # run migrations $ php artisan db:seed # run seeders
Veilig zaaien
Misschien wilt u uw database opnieuw zaaien zonder uw eerder gemaakte zaden aan te tasten. Voor dit doel kunt u firstOrCreate
in uw seeder gebruiken:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
Vervolgens kunt u de database zaaien:
php artisan db:seed
Als u later een ander type medewerker wilt toevoegen, kunt u die nieuwe gewoon in hetzelfde bestand toevoegen:
EmployeeType::firstOrCreate([
'type' => 'manager',
]);
EmployeeType::firstOrCreate([
'type' => 'secretary',
]);
En zaai uw database opnieuw zonder problemen:
php artisan db:seed
Merk op dat u bij het eerste gesprek het record ophaalt maar er niets mee doet.