Проблем
Честа је ствар додавање нових колона у ваше миграције Ларавела. Апликације треба да буду скалабилне, што значи да додавање нових функција додатно развија вашу апликацију.
Врло често нови програмери Ларавел-а морају да покрену своје миграције, али не воде рачуна да се миграције могу вратити и мигрирати више пута, а да ништа не разбију.
Иако то није наш фокус, мислим да је било важно то рећи пре него што кренемо у наш проблем.
Следи уобичајени проблем који ће нови програмери Ларавел-а покушати да ураде када желе да додају нову колону у постојећу табелу.
У овом тренутку су већ урадили нешто попут:
јавна функција горе ()Шема :: цреате ('организације', функција ($ табела)
$ табле-> инкременти ('ид');
$ табле-> стринг ('наме') -> нуллабле ();
$ табле-> тект ('абоут') -> нуллабле ();
);
Ово ће створити нову табелу за њих. Да бисте ово учинили чистим, требало би да додате и функцију надоле и у овом случају само испустите целу табелу. Функција надоле ће се покренути када желите да вратите миграцију уназад.
Прескачући све то, прави проблем се појављује када забораве једну колону и то желе да додају, па креирају нову датотеку за миграцију (класу), покушају да покрену нешто попут:
јавна функција горе ()Шема :: цреате ('организације', функција ($ табела)
$ табле-> интегер ('сизе') -> нуллабле ();
);
Надају се да ће постојећој табели додати нову величину колоне.
Сада да видимо шта се догађа и како спречити да се то понови.
Решење
Главни проблем овде је оно што нови програмери често пропусте да примете које је статично име шеме . Креирајте само када првобитно креирате табелу. Ако требате да ажурирате табелу у било ком тренутку, уместо ње желите да користите табелу.
Дакле, стварна функција треба да буде овако:
јавна функција горе ()Шема :: табела ('организације', функција ($ табела)
$ табле-> интегер ('сизе') -> нуллабле ();
);
А функција надоле би била овако:
јавна функција доле ()Шема :: табела ('организације', функција ($ табела)
$ табле-> дропЦолумн ('сизе');
);
Мој лични предлог вам је да након креирања нове (променљиве) датотеке за миграцију урадите следеће:
- Покрените миграцију
- Проверите да ли је колона додата у табелу
- Враћање миграције покретањем пхп артисан миграте: враћање
- Уверите се да се ништа не догоди
- Поновите корак 2 и 3 поново да бисте били сигурни да можете да затворите пуни круг миграције
н
Још један савет
Ово ће вам добро доћи касније ако желите да аутоматизујете своју примену и ако ваша скрипта треба да изврши враћање.
Још један савет који вам могу дати је да планирате где желите да поставите своју колумну. Само тако што ће урадити, Ларавел ће поставити вашу нову колону на крај, вероватно након колоне упдатед_ат. (Већина табела има ово)
Ако желите да користите методу, тако да би ваш коначни код изгледао овако:
јавна функција горе ()Шема :: табела ('организације', функција ($ табела)
$ табле-> интегер ('сизе') -> афтер ('наме') -> нуллабле ();
);
У овом случају, Ларавел ће поставити вашу нову колону одмах иза колоне имена, тако да изгледа лепо и да је много боље организована.