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.