Problem
Česta je stvar dodavanje novih stupaca u vaše migracije Laravela. Aplikacije bi trebale biti skalabilne, što znači da dodavanje novih značajki dodatno razvija vašu aplikaciju.
Vrlo često novi programeri Laravela trebaju pokretati svoje migracije, ali ne osiguravaju da se migracije mogu vratiti i migrirati više puta, a da ništa ne razbiju.
Iako to nije naš fokus, mislim da je bilo važno to reći prije nego što krenemo u svoj problem.
Slijedi uobičajeni problem koji će novi programeri Laravela pokušati učiniti kada žele dodati novi stupac u postojeću tablicu.
U ovom su trenutku već učinili nešto poput:
javna funkcija gore ()Shema :: create ('organizacije', funkcija ($ tablica)
$ tablica-> inkrementi ('id');
$ table-> string ('name') -> nullable ();
$ table-> text ('about') -> nullable ();
);
To će stvoriti novu tablicu za njih. Da biste ovo učinili čistim, trebali biste dodati i funkciju down i u ovom slučaju samo ispustiti cijelu tablicu. Funkcija dolje pokrenut će se kada želite vratiti svoju migraciju.
Preskačući sve to, pravi se problem pojavljuje kada zaborave jedan stupac i žele to dodati nakon toga, pa kreiraju novu datoteku (klasu) za migraciju, pokušavaju pokrenuti nešto poput:
javna funkcija gore ()Shema :: create ('organizacije', funkcija ($ tablica)
$ table-> integer ('size') -> nullable ();
);
Nadaju se da će postojećoj tablici dodati novu veličinu stupca.
Sada da vidimo što će se dogoditi i kako spriječiti da se to ponovi.
Riješenje
Glavni problem ovdje je ono što novi programeri često propuste primijetiti što je statički naziv sheme . Stvaranje koristite samo kada u početku izrađujete tablicu. Ako u bilo kojem trenutku trebate dodatno ažurirati tablicu, umjesto nje želite koristiti tablicu.
Dakle, stvarna funkcija trebala bi biti sljedeća:
javna funkcija gore ()Schema :: table ('organizacije', funkcija ($ tablica)
$ table-> integer ('size') -> nullable ();
);
A funkcija dolje bi bila sljedeća:
javna funkcija dolje ()Schema :: table ('organizacije', funkcija ($ tablica)
$ tablica-> dropColumn ('veličina');
);
Moj vam osobni prijedlog je da nakon izrade nove (izmjene) datoteke za migraciju napravite sljedeće:
- Pokrenite migraciju
- Provjerite je li stupac dodan u tablicu
- Vraćanje migracije pokretanjem php artisan migrate: vraćanje
- Pazite da se ništa ne dogodi
- Ponovite korak 2 i 3 ponovo kako biste bili sigurni da možete zatvoriti puni krug migracije
n
Još jedan savjet
To će vam dobro doći u kasnijoj fazi ako želite automatizirati svoju implementaciju i ako vaša skripta treba pokrenuti vraćanje.
Još jedan savjet koji vam mogu dati je da planirate gdje želite smjestiti svoju kolumnu. Samo tako radeći, Laravel će smjestiti vaš novi stupac na kraj, vjerojatno nakon stupca updated_at. (Većina tablica ima ovo)
Želite koristiti metodu kako bi vaš konačni kod izgledao ovako:
javna funkcija gore ()Schema :: table ('organizacije', funkcija ($ tablica)
$ table-> integer ('size') -> after ('name') -> nullable ();
);
U ovom slučaju, Laravel će smjestiti vaš novi stupac odmah iza stupca imena, tako da izgleda lijepo i puno je bolje organiziran.