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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow