Generator migracji Laravel
Kod migracji bazy danych dla Laravel
-
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 migracji Laravel
Migracje to wersjonowanie struktury bazy danych. Zamiast ręcznie tworzyć tabele, opisuje się je w kodzie i uruchamia poleceniem php artisan migrate.
Format kolumny
Każda linia to typ nazwa modyfikatory:
string name string email unique integer age nullable decimal price default:0
Dostępne modyfikatory
| Modyfikator | Efekt |
|---|---|
| nullable | kolumna może być pusta |
| unique | wartości muszą być unikalne |
| index | dodaje indeks |
| default:wartość | wartość domyślna |
Przykład
Migracja tabeli produktów z polami name, slug, price i description generuje kod z $table->string('name'), $table->string('slug')->unique() i automatycznymi znacznikami czasu.
Jak użyć?
- Zapisz plik w
database/migrations/z nazwą zawierającą znacznik czasu. - Uruchom
php artisan migrate. - W razie potrzeby cofnij zmianę:
php artisan migrate:rollback.
Jak działa generator migracji Laravel?
Generator działa na zasadzie parsera linii. Każdy wiersz, który wpiszesz, jest dzielony na trzy części: typ kolumny, jej nazwę oraz opcjonalne modyfikatory. Pierwszy token to metoda na obiekcie Blueprint, drugi trafia do niej jako argument w apostrofach, a pozostałe są doklejane jako łańcuch wywołań. Jeśli w linii nie ma modyfikatorów, generator tworzy samo wywołanie, np. $table->string('name');.
Następnie całość jest opakowywana w szkielet klasy migracji: Schema::create('nazwa_tabeli', function (Blueprint $table) { ... });. Generator nie zgaduje nazw tabel ani relacji — bierze dokładnie to, co wpiszesz. Nie tworzy też osobnych plików dla tabel powiązanych. Kolejność kolumn w wyniku odpowiada kolejności linii na wejściu, a na końcu dodawane są znaczniki czasu, czyli $table->timestamps().
Mechanizm jest deterministyczny: te same dane wejściowe dają ten sam kod wyjściowy. Nie ma tu tablic mapujących typy na SQL ani słownika poprawnych nazw. Dzięki temu narzędzie jest szybkie i przewidywalne, ale też nie wychwyci literówek. Jeśli wpiszesz typ, którego nie znasz, trafi on do kodu jako wywołanie metody, która może nie istnieć w Laravel.
Przykład krok po kroku: tabela orders
- Wpisz nazwę tabeli: orders. To 6 znaków, które trafią do Schema::create('orders', ...).
- Wpisz 5 linii kolumn: integer user_id, decimal total default:0, string code unique, integer quantity nullable, string status.
- Generator rozbija każdą linię. Dla integer user_id powstaje $table->integer('user_id');. Dla decimal total default:0 — $table->decimal('total')->default(0);. Dla string code unique — $table->string('code')->unique();. Dla integer quantity nullable — $table->integer('quantity')->nullable();. Dla string status — $table->string('status');.
- Zliczasz wywołania: 5 kolumn z wejścia + 1 wywołanie timestamps = 6 linii w ciele funkcji.
- timestamps dodaje dwie kolumny: created_at i updated_at. Razem tabela orders ma 5 + 2 = 7 kolumn.
- Otrzymujesz gotowy plik migracji. Zapisujesz go w database/migrations/ z nazwą zawierającą znacznik czasu i uruchamiasz php artisan migrate.
Tabela referencyjna: od wpisu do kodu
| Wpis w generatorze | Wygenerowany fragment | Znaczenie |
|---|---|---|
| string name | $table->string('name'); | Kolumna tekstowa bez modyfikatorów. |
| string email unique | $table->string('email')->unique(); | Dodaje unikalny indeks na kolumnie. |
| integer age nullable | $table->integer('age')->nullable(); | Kolumna może przyjmować NULL. |
| decimal price default:0 | $table->decimal('price')->default(0); | Ustawia wartość domyślną 0. |
| foreignId user_id constrained | $table->foreignId('user_id')->constrained(); | Tworzy klucz obcy do tabeli users. |
| id | $table->id(); | BIGINT UNSIGNED AUTO_INCREMENT. |
| timestamps | $table->timestamps(); | Dodaje created_at i updated_at. |
Praktyczne wskazówki
- Trzymaj nazwy w liczbie mnogiej — Laravel domyślnie mapuje model Order na tabelę orders. Jeśli użyjesz innej nazwy, musisz ustawić $table w modelu.
- Klucze obce dodawaj po kolumnach podstawowych — najpierw id, potem foreignId. Choć generator zachowa twoją kolejność, czytelniej jest zaczynać od klucza głównego.
- Modyfikatory pisz w kolejności, w jakiej mają się wykonać — np. string email unique nullable da ->unique()->nullable(). Nie ma to znaczenia dla SQL w większości przypadków, ale ułatwia czytanie.
- Nie używaj default: dla kolumn nullable bez potrzeby — domyślna wartość i NULL to dwa różne stany. Lepiej świadomie wybrać jedno.
- Po wygenerowaniu sprawdź rollback — uruchom php artisan migrate, a potem php artisan migrate:rollback, aby upewnić się, że migracja cofa się bez błędów.
Ograniczenia narzędzia
- Brak walidacji nazw tabel i kolumn — generator nie sprawdza, czy tabela już istnieje, czy nazwa nie jest zarezerwowana. Literówka trafi do kodu.
- Nie zna konwencji twojego projektu — nie uwzględnia prefiksów, osobnych schematów ani niestandardowych nazw kluczy. Wszystko musisz wpisać ręcznie.
- Nie generuje relacji zwrotnych — jeśli dodasz foreignId('user_id')->constrained(), nie powstanie automatycznie migracja dla tabeli users ani metody relacji w modelach.
- Nie obsługuje indeksów złożonych — modyfikatory unique i index działają na pojedynczej kolumnie. Dla indeksu na dwóch kolumnach musisz dopisać kod samodzielnie.
Najczęstsze pytania
Dlaczego nie edytować bazy ręcznie?
Ręczne zmiany nie są odtwarzalne na innym środowisku. Migracje dają spójność i historię zmian w repozytorium.
Czym różni się id() od increments()?
id() tworzy klucz BIGINT UNSIGNED AUTO_INCREMENT. increments() to starszy odpowiednik dla INT.
Jak dodać klucz obcy?
Użyj metody foreignId('user_id')->constrained() lub foreign() w kodzie migracji.
Czy generator migracji Laravel obsługuje typ JSON?
Nie ma osobnego przycisku dla JSON. Jeśli wpiszesz json metadata, generator utworzy $table->json('metadata');, o ile Laravel obsługuje tę metodę. Nie waliduje jednak, czy typ jest dostępny w twojej wersji Laravel.
Jak dodać kolumnę nullable w migracji Laravel?
Wpisz w linii modyfikator nullable, np. string email nullable. Generator dopisze ->nullable() do wywołania kolumny. Kolejność modyfikatorów zależy od ciebie.
Czy mogę dodać wiele kolumn w jednej migracji?
Tak. Każda linia to jedna kolumna. Wpisz ich tyle, ile potrzebujesz, a generator połączy je w jednym Schema::create. Pamiętaj tylko o czytelności — zwykle kilkanaście kolumn to maksimum.
Jak zmienić typ kolumny w migracji Laravel?
Generator tworzy nową migrację, więc nie służy do zmiany istniejących kolumn. Aby zmienić typ, musisz napisać osobną migrację z metodą change() lub użyć pakietu doctrine/dbal, zależnie od wersji Laravel.
Co się stanie, gdy zapomnę o timestamps?
Jeśli nie dodasz ich ręcznie, generator i tak dołoży $table->timestamps() na końcu. Otrzymasz kolumny created_at i updated_at. Jeśli ich nie chcesz, usuń tę linię z wygenerowanego kodu.