laravel

Laravel Hogyan adhat hozzá oszlopot egy meglévő táblához

Laravel Hogyan adhat hozzá oszlopot egy meglévő táblához

Probléma

Új oszlopok hozzáadása a Laravel-migrációkhoz általános dolog. Az alkalmazások méretezhetők, ami azt jelenti, hogy új funkciók hozzáadása tovább fejleszti az alkalmazást.

Nagyon gyakran az új Laravel fejlesztőknek meg kell futtatniuk az áttelepítéseket, de nem gondoskodnak arról, hogy az áttelepítések többször is visszaállhassanak és áttérhessenek anélkül, hogy bármi is megtörne.

Noha ez nem a mi célunk, fontosnak tartom ezt kijelenteni, mielőtt nekilátnánk a problémánknak.

A következő egy gyakori probléma, amelyet az új Laravel fejlesztők megpróbálnak megtenni, amikor új oszlopot akarnak hozzáadni egy meglévő táblához.

Tehát ezen a ponton már valami ilyesmit tettek:

nyilvános funkció fel ()

Séma :: create ('szervezetek', function ($ tábla)
$ tábla-> növekmény ('id');
$ table-> string ('name') -> nullable ();
$ table-> text ('about') -> nullable ();
);

Ez új táblázatot hoz létre számukra. És hogy ez tiszta legyen, hozzá kell adnia a lefelé funkciót is, és ebben az esetben csak el kell dobnia az egész asztalát. A lefelé funkció akkor fog futni, ha vissza akarja állítani az átállást.

Átugrva az egészet, az igazi probléma akkor jelenik meg, amikor elfelejtenek egy oszlopot, és ezt hozzá akarják adni utána, így létrehoznak egy új migrációs fájlt (osztályt), és megpróbálnak futtatni valamit:

nyilvános funkció fel ()

Séma :: create ('szervezetek', function ($ tábla)
$ table-> integer ('size') -> nullable ();
);

Remélik, hogy új oszlopméretet adnak a meglévő táblához.

Most nézzük meg, hogy mi történik, és hogyan lehet megakadályozni, hogy ez ismét megtörténjen.

Megoldás

A fő probléma itt az, amit az új fejlesztők gyakran elmulasztanak észrevenni, ami a séma statikus metódusneve . Csak akkor használja a létrehozást, ha először hozza létre a táblázatot. Ha bármikor frissítenie kell a táblázatot, akkor inkább a táblázatot szeretné használni.

Tehát a valós up funkciónak ilyennek kell lennie:

nyilvános funkció fel ()

Séma :: tábla ('szervezetek', függvény ($ tábla)
$ table-> integer ('size') -> nullable ();
);

A lefelé funkció pedig a következő lenne:

nyilvános funkció le ()

Séma :: tábla ('szervezetek', függvény ($ tábla)
$ table-> dropColumn ('méret');
);

Személyes javaslatom az, hogy az új (módosító) migrációs fájl létrehozása után tegye a következőket:

Újabb tipp

Ez később hasznos lesz, ha automatizálni szeretné a telepítést, és a parancsfájlnak vissza kell futtatnia.

Egy másik tipp, amit tudok adni, az, hogy megtervezze, hová szeretné helyezni az oszlopát. Csak ezzel a Laravel elhelyezi az új oszlopot a végén, valószínűleg az updated_at oszlop után. (A legtöbb asztalnál ez van)

Egy metódust szeretne használni, hogy a végső kód így nézzen ki:

nyilvános funkció fel ()

Séma :: tábla ('szervezetek', függvény ($ tábla)
$ table-> integer ('size') -> after ('name') -> nullable ();
);

Ebben az esetben a Laravel az új oszlopot közvetlenül a névoszlop után helyezi el, így szépnek tűnik és sokkal jobban szervezett.

Az 5 legjobb játékrögzítő kártya
Mindannyian láttuk és szerettük a YouTube-on a streaming játékokat. A PewDiePie, a Jakesepticye és a Markiplier csak néhány a legnépszerűbb játékosok ...
Hogyan lehet játékot fejleszteni Linuxon
Egy évtizeddel ezelőtt nem sok Linux-felhasználó jósolta, hogy kedvenc operációs rendszerük egy napon a videojátékok népszerű játékplatformja lesz. El...
Kereskedelmi játékmotorok nyílt forráskódú portjai
Ingyenes, nyílt forráskódú és platformokon átívelő játékmotorok szabadidős programjai felhasználhatók a régi, valamint a meglehetősen friss játékcímek...