Jak wykonać rozsiewanie bazy danych w Laravel?
W przeszłości publikowałem artykuł How to Seed Database in PHP using Faker Library. Podczas badania tego tematu odkryłem, że Laravel również używa tej samej biblioteki do zapełniania bazy danych. Ponieważ pisałem artykuł na ten temat dla PHP, postanowiłem napisać również post o seedingu bazy danych Laravel. Dzieje się tak, ponieważ Laravel używa własnego procesu do zapełniania bazy danych.
Co to jest wysiew bazy danych?
Inicjowanie bazy danych oznacza programowe wypełnienie tabel bazy danych danymi testowymi. Dzięki takiemu podejściu można w ciągu kilku minut wprowadzić do bazy tysiące rekordów. Jest to skuteczny sposób, a nie robienie tego ręcznie. Możesz chcieć fikcyjnych danych, aby przetestować twoją aplikację, a umieszczanie bazy danych w programie pozwala zaoszczędzić mnóstwo czasu.
Biblioteka fałszywych
Faker to biblioteka typu open source, która generuje fałszywe dane dla bazy danych aplikacji. Za pomocą Fakera można w kilka minut wstawić tysiące wpisów do bazy danych. Ta biblioteka oszczędza programistom nudne zadanie wprowadzania danych. Możesz uzyskać prawie każdy rodzaj danych, które chcesz. Biblioteka generuje fałszywy e-mail, imię i nazwisko, numer telefonu komórkowego, słowa, zdania, akapity, liczby losowe itp. Możesz przeczytać, jakie dane podają w dokumentacji.
Laravel instaluje tę bibliotekę w swoim rdzeniu. Oznacza to, że nie musisz instalować go osobno. Biorąc to pod uwagę, przyjrzyjmy się, jak wykonać seeding bazy danych w Laravel.
Pierwsze kroki
Aby rozpocząć, mam zamiar utworzyć tabelę „klienci" z nazwami kolumn, adresem e-mail i biografią. Zobaczymy proces rozstawiania pojedynczego stołu. W ten sam sposób użytkownicy mogą umieszczać dowolną liczbę tabel.
Utwórz tabelę migracji dla klientów za pomocą polecenia:
php artisan make:migration create_customers_table
Otwórz plik migracji i dodaj kolumny do metody „w górę”, jak pokazano poniżej.
public function up()
{
Schema::create('customers', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->text('bio');
$table->timestamps();
});
}
Uruchom polecenie migrate, które utworzy tabelę „customers” w Twojej bazie danych.
php artisan migrate
Następnie utwórz model „Klient”, który mapuje się do tabeli „klienci”. Począwszy od Laravel 8.x Twoje modele będą tworzone w katalogu ‘App/Models’. W tym samouczku zakładam, że używasz Laravel 8.x. W starszej wersji Laravela musisz dostosować ścieżkę modelu.
php artisan make:model Customer
Rozsiewanie bazy danych w Laravel
Seeding bazy danych w Laravelu wymaga wykonania kilku kroków, takich jak napisanie seederów, utworzenie fabryki modeli i uruchomienie seederów. Zróbmy to jeden po drugim.
Pisanie siewców
Jeśli spojrzysz na system plików Laravel, zauważysz katalog database/seeders
. Wszystkie klasy seed zostaną umieszczone w tym katalogu. Klasa początkowa ma run
metodę, z której można wstawić dane do tabeli.
Utwórz klasę seed CustomerSeeder za pomocą polecenia:
php artisan make:seeder CustomerSeeder
Po wykonaniu tego polecenia powinieneś zobaczyć CustomerSeeder.php
plik utworzony w database/seeders
. Otwórz ten plik i do run
funkcji dodaj poniższy kod.
public function run()
{
AppModelsCustomer::factory()->count(50)->create()->each(function ($customer) {
$customer->save();
});
}
Tu dzwonię do Fabryki Klienta, którą stworzymy w następnym kroku. Zauważ, że przekazałem wartość 50 do metody ‘count’. Oznacza to, że w tabeli „klienci” należy umieścić 50 wierszy. Dostosuj tę wartość, jak chcesz.
Tworzenie fabryk
Kod, który napisałem, CustomerSeeder
będzie szukał fabryki, aby uzyskać dane testowe. Oznacza to, że musimy stworzyć modelową fabrykę. Nadaję nazwę fabryce jako CustomerFactory. Uruchom polecenie, aby wygenerować fabrykę modeli.
php artisan make:factory CustomerFactory --model=Customer
To polecenie utworzy CustomerFactory.php
wewnątrz database/factories
katalogu. Otwórz ten plik i do metody definicji wygeneruj dane testowe w następujący sposób.
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'bio' => $this->faker->text,
];
}
Powyższa tablica zwraca losowo wybraną nazwę, adres e-mail i tekst biografii.
Siewniki biegające
Wszyscy ustawiamy się z siewnikiem i fabryką. Teraz uruchom nasz siewnik za pomocą poniższego polecenia.
php artisan db:seed --class=CustomerSeeder
Sprawdź tabelę „klienci” i powinna zawierać 50 fikcyjnych wpisów.
Powyższe polecenie uruchamia pojedynczy seeder, który przekazaliśmy jawnie. Załóżmy, że chcesz utworzyć wiele seederów i uruchomić je wszystkie za pomocą jednego polecenia. W takich przypadkach powinieneś zadzwonić do seederów z tego, DatabaseSeeder
który znajduje się w tym samym katalogu database/seeders
.
public function run()
{
$this->call(CustomerSeeder::class);
// call as many seeders you wish
}
Użytkownik może utworzyć dowolną liczbę seederów zgodnie ze swoimi wymaganiami i wywołać je z tej run
metody.
Na koniec uruchom seedery za pomocą poniższego polecenia.
php artisan db:seed
Wywoła wszystkie seedery z run
metody i wykona ją.
Mam nadzieję, że rozumiesz temat seedowania bazy danych w Laravel. Chciałbym usłyszeć wasze przemyślenia i sugestie w sekcji komentarzy poniżej.
Powiązane artykuły
- Integracja PayPal Payments Pro w Laravel
- Utwórz Honeypot do walki ze spamem formularzy w Laravel
- Dodawanie Google reCAPTCHA v3 do Twojej witryny Laravel