Problém
Pridávanie nových stĺpcov do vašich migrácií laravel je bežná vec. Aplikácie majú byť škálovateľné, čo znamená, že pridaním nových funkcií sa vaša aplikácia ďalej rozvinie.
Noví vývojári Laravelu musia veľmi často migrovať, ale nezabezpečujú, aby sa migrácie mohli vrátiť späť a migrovať viackrát bez toho, aby niečo porušili.
Aj keď to nie je naším zameraním, myslím si, že bolo dôležité povedať to skôr, ako sa pustíme do nášho problému.
Toto je bežný problém, ktorý sa noví vývojári Laravelu pokúsia urobiť, keď chcú pridať nový stĺpec do existujúcej tabuľky.
Takže v tomto okamihu už urobili niečo ako:
verejná funkcia hore ()Schéma :: create ('organizácie', funkcia ($ tabuľka)
$ table-> prírastky ('id');
$ table-> string ('name') -> nullable ();
$ table-> text ('about') -> nullable ();
);
Takto im vytvoríte novú tabuľku. A aby to bolo čisté, mali by ste tiež pridať funkciu down a v takom prípade len zhodiť celú tabuľku. Funkcia nadol sa spustí, keď chcete vrátiť migráciu späť.
Keď to všetko preskočíme, skutočný problém sa objaví, keď zabudnú na jeden stĺpec a chcú to doplniť, aby potom vytvorili nový migračný súbor (triedu), skúste spustiť niečo ako:
verejná funkcia hore ()Schéma :: create ('organizácie', funkcia ($ tabuľka)
$ table-> integer ('size') -> nullable ();
);
Dúfajú, že do existujúcej tabuľky pridajú novú veľkosť stĺpca.
Teraz sa pozrime, čo sa stane a ako zabrániť tomu, aby sa to už nezopakovalo.
Riešenie
Hlavným problémom je, čo si noví vývojári zvyknú nevšimnúť, čo je názov schémy statickej metódy . Vytvorenie použijete iba pri pôvodnom vytváraní tabuľky. Ak potrebujete svoju tabuľku kedykoľvek aktualizovať, budete radšej chcieť použiť tabuľku.
Skutočná funkcia hore by teda mala byť taká:
verejná funkcia hore ()Schéma :: tabuľka ('organizácie', funkcia ($ tabuľka)
$ table-> integer ('size') -> nullable ();
);
A funkcia down by bola nasledovná:
verejná funkcia dole ()Schéma :: tabuľka ('organizácie', funkcia ($ tabuľka)
$ table-> dropColumn ('size');
);
Môj osobný návrh je, že po vytvorení nového (pozmeňujúceho) migračného súboru postupujte takto:
- Spustite migráciu
- Skontrolujte, či je stĺpec pridaný do tabuľky
- Vráťte migráciu späť spustením php artisan migrate: rollback
- Dbajte na to, aby sa nič nestalo
- Zopakujte kroky 2 a 3 znova, aby ste sa ubezpečili, že môžete uzavrieť celý kruh migratio
n
Ďalší tip
To sa vám bude hodiť v neskoršej fáze, ak chcete automatizovať svoje nasadenie a je potrebné, aby bol váš skript spustený vrátením zmien.
Ďalším tipom, ktorý vám môžem dať, je naplánovanie umiestnenia stĺpca. Týmto spôsobom Laravel umiestni váš nový stĺpec na koniec, pravdepodobne za stĺpec updated_at. (Väčšina tabuliek to má)
Chcete použiť metódu potom, aby váš konečný kód vyzeral takto:
verejná funkcia hore ()Schéma :: tabuľka ('organizácie', funkcia ($ tabuľka)
$ table-> integer ('size') -> after ('name') -> nullable ();
);
V takom prípade Laravel umiestni váš nový stĺpec hneď za stĺpec s menom, aby vyzeral pekne a bol lepšie usporiadaný.