Szukaj…


Uwagi

Seeding bazy danych pozwala wstawiać dane, ogólne dane testowe do bazy danych. Domyślnie istnieje DatabaseSeeder w database/seeds .

Uruchomienie siewników można wykonać za pomocą

php artisan db:seed

Lub jeśli chcesz przetworzyć tylko jedną klasę

php artisan db:seed --class=TestSeederClass

Podobnie jak w przypadku wszystkich poleceń rzemieślnika, masz dostęp do szerokiej gamy metod, które można znaleźć w dokumentacji interfejsu API

Wstawianie danych

Istnieje kilka sposobów wstawiania danych:

Korzystanie z fasady DB

public function run()
{
    DB::table('users')
        ->insert([
            'name' => 'Taylor',
            'age'  => 21
        ]);
}

Poprzez tworzenie instancji modelu

public function run()
{
    $user = new User;
    $user->name = 'Taylor';
    $user->save();
}

Za pomocą metody tworzenia

public function run()
{
    User::create([
        'name' => 'Taylor',
        'age'  => 21
    ]);
}

Korzystanie z fabryki

public function run()
{
    factory(App\User::class, 10)->create();
}

Seeding && usuwanie starych danych i resetowanie automatycznego przyrostu

public function run()
{
    DB::table('users')->delete();
    DB::unprepared('ALTER TABLE users AUTO_INCREMENT=1;');
    factory(App\User::class, 200)->create();
}

Zobacz przykład Utrwalanie, aby uzyskać więcej informacji na temat wstawiania / aktualizowania danych.

Dzwonienie do innych siewników

W swojej klasie DatabaseSeeder możesz wywoływać inne programy inicjujące

$this->call(TestSeeder::class)

Pozwala to zachować jeden plik, w którym można łatwo znaleźć swoje seedery. Pamiętaj, że musisz zwracać uwagę na kolejność połączeń dotyczących ograniczeń klucza obcego. Nie możesz odwoływać się do tabeli, która jeszcze nie istnieje.

Tworzenie siewnika

Aby utworzyć siewniki, możesz użyć polecenia make:seeder Artisan. Wszystkie wygenerowane seedery zostaną umieszczone w katalogu database/seeds .

$ php artisan make:seeder MoviesTableSeeder

Wygenerowane seedery będą zawierać jedną metodę: run . W ten sposób możesz wstawiać dane do swojej bazy danych.

<?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'
        ]);
    }
}

Zasadniczo będziesz chciał wywoływać wszystkie swoje seedery w klasie DatabaseSeeder .

Gdy skończysz pisać seedery, użyj komendy db:seed . Spowoduje to run funkcji uruchamiania DatabaseSeeder .

$ php artisan db:seed

Możesz także określić, aby uruchomić określoną klasę siewnika, aby działała indywidualnie, używając opcji --class .

$ php artisan db:seed --class=UserSeeder

Jeśli chcesz wycofać i ponownie uruchomić wszystkie migracje, a następnie ponownie uruchomić:

$ php artisan migrate:refresh --seed

Polecenie migrate:refresh --seed to skrót do tych 3 poleceń:

$ php artisan migrate:reset     # rollback all migrations
$ php artisan migrate           # run migrations
$ php artisan db:seed           # run seeders

Bezpieczne ponowne wysianie

Możesz zresetować bazę danych bez wpływu na wcześniej utworzone nasiona. W tym celu możesz użyć firstOrCreate w firstOrCreate :

EmployeeType::firstOrCreate([
    'type' => 'manager',
]);

Następnie możesz zainicjować bazę danych:

php artisan db:seed

Później, jeśli chcesz dodać innego rodzaju pracownika, możesz po prostu dodać ten nowy w tym samym pliku:

EmployeeType::firstOrCreate([
    'type' => 'manager',
]);
EmployeeType::firstOrCreate([
    'type' => 'secretary',
]);

I ponownie zrób bazę danych bez żadnych problemów:

php artisan db:seed

Zauważ, że w pierwszym połączeniu odzyskujesz rekord, ale nic z nim nie robisz.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow