Laravel, jak dodać kolumnę do istniejącej tabeli

Laravel, jak dodać kolumnę do istniejącej tabeli

Problem

Dodanie nowych kolumn do migracji Laravela jest powszechną rzeczą. Aplikacje mają być skalowalne, co oznacza, że ​​dodanie nowych funkcji rozwija aplikację.

Bardzo często nowi programiści Laravel muszą prowadzić migracje, ale nie upewniają się, że migracje mogą cofać się i migrować wiele razy, bez łamania niczego.

Chociaż nie jest to naszym celem, myślę, że ważne było, aby stwierdzić, że zanim przejdziemy do naszego problemu.

Poniżej znajduje się powszechny problem, który nowi programiści Laravel będą próbowały zrobić, gdy chcą dodać nową kolumnę do istniejącej tabeli.

W tym momencie zrobili już coś w rodzaju:

Funkcja publiczna w górę ()

Schema :: „organizacje”, funkcja ($ tabela)
$ table-> przyrosty („id”);
$ tabela-> string ('name')-> nullable ();
$ TABLE-> Text ('About')-> nullable ();
);

To stworzy dla nich nową tabelę. Aby to było czyste, powinieneś również dodać funkcję w dół i po prostu upuść cały stół w tym przypadku. Funkcja Down zostanie uruchomiona, gdy chcesz cofnąć migrację.

Przeskakując przez to wszystko, pojawia się prawdziwy problem, gdy zapominają o jednej kolumnie i chcą go później dodać, aby utworzyć nowy plik migracyjny (klasa), próbują uruchomić coś takiego:

Funkcja publiczna w górę ()

Schema :: „organizacje”, funkcja ($ tabela)
$ table-> liczba całkowita ('size')-> nullable ();
);

Mają nadzieję dodać nowy rozmiar kolumny do istniejącej tabeli.

Teraz zobaczmy, co się stanie i jak temu zapobiec powtórzeniu.

Rozwiązanie

Głównym problemem jest to, co nowi programiści często tęsknią . Używasz Utwórz tylko wtedy, gdy początkowo tworzysz swój stół. Jeśli chcesz dalej zaktualizować tabelę w dowolnym momencie, chcesz zamiast tego użyć tabeli.

Tak więc prawdziwa funkcja UP powinna być taka:

Funkcja publiczna w górę ()

Schema :: „organizacje”, funkcja ($ tabela)
$ table-> liczba całkowita ('size')-> nullable ();
);

A funkcja spadła byłaby taka:

Funkcja publiczna w dół ()

Schema :: „organizacje”, funkcja ($ tabela)
$ TABLE-> DropColumn („rozmiar”);
);

Moją osobistą sugestią jest to, że po utworzeniu nowego (zmieniania) pliku migracyjnego wykonaj następujące czynności:

  • Uruchom migrację
  • Sprawdź, czy kolumna jest dodawana do tabeli
  • ROCKACJA MIGRACJA poprzez uruchamianie PHP Artisan migruj: Rolback
  • Upewnij się, że nic się nie dzieje
  • Powtórz krok 2 i 3 ponownie, aby upewnić się, że możesz zamknąć pełne koło migracji
  • N

Kolejna wskazówka

Przydaje się to na późniejszym etapie, jeśli chcesz zautomatyzować wdrażanie, a skrypt musi uruchomić wycofanie.

Kolejną wskazówką, którą mogę ci dać, jest zaplanowanie tam, gdzie chcesz umieścić swoją kolumnę. W ten sposób Laravel umieści nową kolumnę na końcu, prawdopodobnie po zaktualizowanej kolumnie_at. (Większość tabel ma to)

Chcesz użyć metody, aby Twój ostatni kod wyglądałby tak:

Funkcja publiczna w górę ()

Schema :: „organizacje”, funkcja ($ tabela)
$ TABLE-> Integer ('size')-> po ('name')-> nullable ();
);

W takim przypadku Laravel umieści nową kolumnę zaraz po kolumnie z nazwą, aby wyglądała ładnie i jest znacznie lepiej zorganizowana.