Проблем
Добавянето на нови колони към вашите миграции на Laravel е често срещано нещо. Приложенията са предназначени да бъдат мащабируеми, което означава, че добавянето на нови функции доразвива вашето приложение.
Много често новите разработчици на Laravel трябва да изпълняват своите миграции, но те не се уверяват, че миграциите могат да се върнат и мигрират многократно, без да нарушават нищо.
Въпреки че това не е нашият фокус, мисля, че беше важно да заявим това, преди да се насочим към проблема си.
По-долу е често срещан проблем, който новите разработчици на Laravel ще се опитат да направят, когато искат да добавят нова колона към съществуваща таблица.
Така че в този момент те вече направиха нещо като:
публична функция нагоре ()Схема :: създаване ('организации', функция ($ таблица)
$ таблица-> приращения ('id');
$ table-> string ('name') -> nullable ();
$ table-> text ('about') -> nullable ();
);
Това ще създаде нова таблица за тях. И за да направите това чисто, трябва също да добавите функцията надолу и просто да пуснете цялата си маса в този случай. Функцията надолу ще се стартира, когато искате да върнете миграцията назад.
Прескачайки всичко това, истинският проблем се появява, когато забравят една колона и искат да я добавят след това, за да създадат нов миграционен файл (клас), опитайте да стартирате нещо като:
публична функция нагоре ()Схема :: създаване ('организации', функция ($ таблица)
$ table-> integer ('size') -> nullable ();
);
Те се надяват да добавят нов размер на колоната към съществуващата таблица.
Сега нека видим какво се случва и как да предотвратим това да се повтори.
Решение
Основният проблем тук е това, което новите разработчици често са склонни да пропуснат да забележат кое е статичното име на метода на Схемата . Създаването използвате само когато първоначално създавате таблицата си. Ако трябва да актуализирате таблицата си по всяко време, вместо това искате да използвате таблица.
Така че реалната функция нагоре трябва да бъде следната:
публична функция нагоре ()Схема :: таблица ('организации', функция ($ таблица)
$ table-> integer ('size') -> nullable ();
);
И функцията надолу ще бъде следната:
публична функция надолу ()Схема :: таблица ('организации', функция ($ таблица)
$ таблица-> dropColumn ('размер');
);
Моето лично предложение към вас е, че след като създадете своя нов (променящ) файл за миграция, направете следното:
- Стартирайте миграцията
- Проверете дали колоната е добавена към таблицата
- Възстановяване на миграцията чрез стартиране на php artisan migrate: откат
- Уверете се, че нищо не се случва
- Повторете стъпки 2 и 3 отново, за да сте сигурни, че можете да затворите пълния кръг на миграцията
н
Още един съвет
Това ще бъде полезно на по-късен етап, ако искате да автоматизирате внедряването си и вашият скрипт трябва да изпълни възстановяване.
Друг съвет, който мога да ви дам, е да планирате къде искате да поставите вашата колона. Просто като направите това, Laravel ще постави новата ви колона в края, вероятно след колоната updated_at. (Повечето таблици имат това)
Искате да използвате метод след, така че окончателният ви код да изглежда така:
публична функция нагоре ()Схема :: таблица ('организации', функция ($ таблица)
$ table-> integer ('size') -> after ('name') -> nullable ();
);
В този случай Laravel ще постави новата ви колона веднага след колоната с име, така че да изглежда добре и да е организирана много по-добре.