Generator Laravel Seeder
Wypełnij bazę danymi testowymi
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator seedera Laravel
Seedery wypełniają bazę danych przykładowymi lub startowymi danymi. Razem z migracjami pozwalają odtworzyć środowisko jednym poleceniem.
Fabryka czy tabela?
| Podejście | Kiedy stosować |
|---|---|
Model::factory() | gdy masz zdefiniowaną fabrykę — generuje realistyczne dane |
DB::table() | proste, stałe dane startowe (np. słowniki, role) |
Przykład (fabryka)
User::factory()->count(10)->create();
Tworzy 10 użytkowników z danymi z fabryki. Wymaga klasy database/factories/UserFactory.php.
Uruchamianie
php artisan db:seed— uruchamia główny DatabaseSeeder.php artisan db:seed --class=UserSeeder— konkretny seeder.php artisan migrate:fresh --seed— przebudowa bazy z danymi.
Jak działa generator seedera Laravel
Narzędzie nie łączy się z twoją bazą i nie czyta plików migracji. Schemat opisujesz ręcznie w formularzu: nazwa modelu lub tabeli, lista kolumn wraz z typami, liczba rekordów oraz tryb zapisu. Na tej podstawie powstaje kompletny kod klasy seedera, który kopiujesz do projektu. To celowe uproszczenie — dzięki temu generator działa tak samo dla świeżej aplikacji, jak i dla projektu, w którym migracje są rozproszone albo nadpisane.
Wygenerowany plik trafia do katalogu database/seeders, a klasa dziedziczy po Illuminate\Database\Seeder i implementuje metodę run(). W środku znajduje się albo tablica wierszy przekazywana do DB::table(...)->insert(), albo wywołanie Model::factory() z podaną liczbą rekordów. Pierwszy wariant daje dane stałe i powtarzalne, drugi losowe, zależne od tego, co zwraca fabryka. Tryb zmienia więc tylko treść metody run(), a nie strukturę pliku ani sposób jego uruchamiania.
Najważniejsza część pracy to zamiana typów kolumn na konkretne wartości. Typ tekstowy staje się ciągiem znaków, liczba całkowita liczbą bez części ułamkowej, decimal kwotą zapisaną tekstowo, boolean wartością prawda lub fałsz, a data datą w formacie akceptowanym przez bazę. Kolumna klucza obcego to zwykła liczba, więc generator nie sprawdza, czy wskazany rekord istnieje w powiązanej tabeli — to już twoja odpowiedzialność. Narzędzie nie ma wbudowanych list wartości ani słowników, więc wszystkie dane, które mają być stałe, wpisujesz samodzielnie.
Przykład: seeder dla tabeli products krok po kroku
- Nazwa modelu: Product, tabela products. Tę nazwę wpisujesz w pierwsze pole formularza — od niej zależy nazwa klasy i pliku.
- Kolumny: name (string), price (decimal), stock (integer), is_active (boolean). Cztery kolumny poza kluczem głównym, który doda baza.
- Liczba rekordów: 10. Tyle wierszy ma znaleźć się w wygenerowanym seedzie.
- Tryb zapisu: DB::table, czyli stałe dane bez odwołania do fabryki.
- Wynik działania narzędzia: plik database/seeders/ProductSeeder.php z metodą run(). W tablicy znajdzie się 10 wierszy, każdy po 4 wartości, co daje 40 wartości do wypełnienia.
- Uruchomienie: kopiujesz plik do projektu, dopisujesz wywołanie klasy w DatabaseSeeder i odpalasz seeder. Kontrola poprawności: zapytanie SELECT COUNT(*) FROM products zwraca 10.
Typy kolumn i wartości, które trafiają do seedera
| Typ kolumny | Co generuje narzędzie | Na co uważać |
|---|---|---|
| string | krótki ciąg znaków, wartość własna albo losowa | dopasuj długość do limitu ustawionego w migracji |
| text | dłuższy ciąg znaków, również wielolinijkowy | nie wstawiaj tu danych, które mają być unikalne |
| integer, bigInteger | liczba całkowita bez części ułamkowej | zakres musi mieścić się w typie kolumny |
| decimal | kwota lub wartość z ustaloną liczbą miejsc po przecinku | w PHP bezpieczniej trzymać ją jako ciąg znaków niż jako float |
| boolean | prawda albo fałsz | w wielu bazach zapisuje się jako 0 lub 1 |
| date, dateTime | data lub znacznik czasu | format musi być zgodny z kolumną, inaczej insert się nie wykona |
| foreignId | liczba wskazująca rekord z innej tabeli | generator nie sprawdza, czy taki rekord istnieje |
| enum | jedna z wartości zdefiniowanych w migracji | listy wartości nie ma w generatorze, trzeba ją podać ręcznie |
Praktyczne wskazówki przed uruchomieniem seedera
- Jeden seeder na jedną tabelę — osobne klasy łatwiej uruchamiać pojedynczo i łatwiej wyłapać, który plik psuje dane, gdy coś pójdzie nie tak.
- Zadbaj o powtarzalność — przed wstawieniem wyczyść tabelę metodą truncate lub delete, albo zamiast insertu użyj updateOrCreate. Bez tego drugie uruchomienie seedera zdubluje wiersze.
- Wstawiaj partiami — przy dużej liczbie rekordów dziel zapis na porcje, żeby nie przekroczyć limitu zapytania i nie trzymać w pamięci ogromnej tablicy.
- Nie wpisuj kluczy obcych na sztywno — pobieraj identyfikatory z bazy zapytaniem o konkretny rekord zamiast zakładać, że klucz główny będzie miał określoną wartość.
- Pilnuj kolejności wywołań — tabele słownikowe i nadrzędne ładuj przed tymi, które się do nich odwołują, inaczej insert zatrzyma się na ograniczeniu klucza obcego.
Czego generator nie zrobi za ciebie
- Nie zna twojego schematu — nie czyta migracji ani bazy, więc literówka w nazwie kolumny albo zły typ przejdzie prosto do wygenerowanego kodu i ujawni się dopiero przy uruchomieniu.
- Nie tworzy spójnych relacji — dane w powiązanych tabelach nie są uzgadniane między sobą, a klucze obce to liczby bez gwarancji, że wskazany rekord istnieje.
- Nie waliduje reguł bazy — unikalność, limity długości, wartości enum i ograniczenia check nie są sprawdzane, błąd wróci z silnika bazy dopiero podczas seedowania.
- Nie generuje fabryk — w trybie opartym na fabryce klasa fabryki musi już istnieć w projekcie, narzędzie jedynie odwołuje się do niej w metodzie run().
Najczęstsze pytania
Czy seedery usuwa dane?
Nie same z siebie. Jeśli chcesz wyczyścić tabelę, wywołaj Model::truncate() lub DB::table(...)->delete() przed wstawieniem.
Czy można używać na produkcji?
Tylko z rozwagą i dla danych słownikowych. Danych testowych nie wstawiaj na produkcję.
Jak objąć seeder transakcją?
Wystarczy uruchomić go wewnątrz DB::transaction(), aby w razie błędu wycofać wszystkie zmiany.
Czym różni się generator seedera od fabryki w Laravel?
Seeder wypełnia bazę danymi, a fabryka opisuje sposób tworzenia pojedynczego modelu. Generator tworzy plik seedera, natomiast w trybie fabryki jedynie odwołuje się do istniejącej klasy fabryki, której sam nie wygeneruje.
Czy wygenerowany seeder sam wyczyści tabelę przed wstawieniem danych?
Nie. Kod wstawia dane dokładnie tak, jak został wygenerowany. Jeśli chcesz uniknąć duplikatów, dopisz truncate lub delete przed insertem albo zamień insert na updateOrCreate.
Jak wstawić dane tylko wtedy, gdy tabela jest pusta?
Sprawdź na początku metody run() liczbę rekordów i przerwij działanie, gdy tabela nie jest pusta. Dzięki temu seeder można bezpiecznie uruchamiać wielokrotnie, także w skryptach wdrożeniowych.
Czy generator obsługuje wiele tabel naraz?
Nie, jeden przebieg to jedna klasa seedera dla jednej tabeli. Dla kilku tabel generujesz osobne pliki i wywołujesz je po kolei w DatabaseSeeder, pamiętając o kolejności przy kluczach obcych.
Czy dane z seedera można wstawiać na produkcję?
Tylko dane słownikowe i startowe, takie jak role, statusy czy kategorie. Danych testowych nie wstawiaj na produkcję, bo zaburzą statystyki i mogą pojawić się w interfejsie użytkownika.