laravel

Laravel Jak dodać kolumnę do istniejącej tabeli

Laravel Jak dodać kolumnę do istniejącej tabeli

Problem

Dodawanie nowych kolumn do migracji Laravel to powszechna rzecz. Aplikacje mają być skalowalne, co oznacza, że ​​dodawanie nowych funkcji dodatkowo rozwija Twoją aplikację.

Bardzo często nowi programiści Laravela muszą uruchamiać swoje migracje, ale nie upewniają się, że migracje mogą cofać się i migrować wiele razy bez zerwania czegokolwiek.

Chociaż nie na tym się skupiamy, myślę, że ważne było, aby to stwierdzić, zanim wpadniemy w nasz problem.

Oto typowy problem, który nowi programiści Laravela będą próbowali zrobić, gdy chcą dodaćnowąkolumnę do istniejącej tabeli.

Więc w tym momencie zrobili już coś takiego:

funkcja publiczna w górę()

Schema::create('organizacje', function ($table)
$table->przyrosty('id');
$table->string('name')->nullable();
$table->text('about')->nullable();
);

Stworzy to dla nich nową tabelę. Aby to było czyste, powinieneś również dodać funkcję down i po prostu upuścić cały stół w tym przypadku. Funkcja down zostanie uruchomiona, gdy będziesz chciał wycofać migrację.

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

funkcja publiczna w górę()

Schema::create('organizacje', function ($table)
$table->integer('rozmiar')->nullable();
);

Mają nadzieję na dodanie nowego rozmiaru kolumny do istniejącej tabeli.

Zobaczmy teraz, co się stanie i jak temu zapobiec.

Rozwiązanie

Głównym problemem jest to, co nowi programiści często nie zauważają, czyli statyczna nazwa metody schematu . Używasz tworzenia tylko wtedy, gdy początkowo tworzysz swoją tabelę. Jeśli w dowolnym momencie musisz dalej aktualizować swój stół, zamiast tego chcesz użyć tabeli.

Tak więc prawdziwa funkcja up powinna wyglądać tak:

funkcja publiczna w górę()

Schema::table('organizacje', function ($table)
$table->integer('rozmiar')->nullable();
);

A funkcja down wyglądałaby tak:

funkcja publiczna wyłączona()

Schema::table('organizacje', function($table)
$table->dropColumn('rozmiar');
);

Moja osobista sugestia jest taka, że ​​po utworzeniu nowego (zmieniającego) pliku migracji wykonaj następujące czynności:

Kolejna wskazówka

Przyda się to na późniejszym etapie, jeśli chcesz zautomatyzować wdrożenie, a skrypt musi uruchomić wycofywanie zmian.

Kolejną wskazówką, którą mogę ci dać, jest zaplanowanie miejsca, w którym chcesz umieścić swoją kolumnę. Robiąc to, Laravel umieści twoją nową kolumnę na końcu, prawdopodobnie po kolumnie updated_at. (Większość stołów ma to)

Następnie chcesz użyć metody, aby Twój ostateczny kod wyglądał tak:

funkcja publiczna w górę()

Schema::table('organizacje', function ($table)
$table->integer('size')->after('name')->nullable();
);

W takim przypadku Laravel umieści twoją nową kolumnę zaraz po kolumnie z nazwą, aby wyglądała ładniej i była o wiele lepiej zorganizowana.

Cursor jumps or moves randomly while typing in Windows 10
If you find that your mouse cursor jumps or moves on its own, automatically, randomly while typing in Windows laptop or computer, then some of these s...
How to reverse Mouse and Touchpads scrolling direction in Windows 10
Mouse and Touchpads not only make computing easy but more efficient and less time-consuming. We cannot imagine a life without these devices, but still...
How to change Mouse pointer and cursor size, color & scheme on Windows 10
The mouse pointer and cursor in Windows 10 are very important aspects of the operating system. This can be said for other operating systems as well, s...