Проблема
Додавання нових стовпців до міграцій Laravel - звична справа. Програми призначені для масштабування, а це означає, що додавання нових функцій додатково розвиває вашу програму.
Дуже часто новим розробникам Laravel потрібно запускати свої міграції, але вони не переконуються, що міграції можуть відкочуватися та мігрувати кілька разів, не порушуючи нічого.
Хоча це не наша увага, я думаю, було важливо сказати, що перед тим, як ми розглянемо нашу проблему.
Далі наводиться поширена проблема, яку намагатимуться зробити нові розробники Laravel, коли вони хочуть додати новий стовпець до існуючої таблиці.
Тож на цей момент вони вже зробили щось на зразок:
публічна функція вгору ()Схема :: create ('organization', function ($ table)
$ таблиця-> прирости ('id');
$ table-> string ('name') -> nullable ();
$ table-> text ('about') -> nullable ();
);
Це створить для них нову таблицю. І щоб зробити це чистим, вам слід також додати функцію вниз і в цьому випадку просто опустити всю таблицю. Функція вниз буде запущена, коли ви хочете відмовити міграцію.
Перебираючи все це, справжня проблема проявляється, коли вони забувають один стовпець, і вони хочуть додати це згодом, щоб створити новий файл міграції (клас), спробувати запустити щось на зразок:
публічна функція вгору ()Схема :: create ('organization', function ($ table)
$ table-> integer ('size') -> nullable ();
);
Вони сподіваються додати новий розмір стовпця до існуючої таблиці.
А тепер давайте подивимося, що відбувається і як запобігти цьому більше.
Рішення
Основна проблема тут полягає в тому, що нові розробники часто, як правило, пропускають помітити, яка статична назва методу є схемою . Ви використовуєте create лише тоді, коли ви спочатку створюєте свою таблицю. Якщо вам потрібно будь-коли оновити таблицю в будь-який час, ви хочете використовувати таблицю.
Тож реальна функція вгору повинна виглядати так:
публічна функція вгору ()Schema :: table ('організації', функція ($ table)
$ table-> integer ('size') -> nullable ();
);
І функція вниз буде виглядати так:
публічна функція знижена ()Schema :: table ('організації', функція ($ таблиця)
$ table-> dropColumn ('розмір');
);
Я особисто вам пропоную, щоб після створення нового (змінного) файлу міграції зробили наступне:
- Запустіть міграцію
- Перевірте, чи стовпець додано до таблиці
- Відкат міграції шляхом запуску php artisan migrate: відкат
- Переконайтесь, що нічого не відбувається
- Повторіть кроки 2 і 3 ще раз, щоб переконатися, що ви можете закрити повне коло міграції
п
Ще одна порада
Це стане в нагоді пізніше, якщо ви хочете автоматизувати розгортання, а сценарію потрібно виконати відкат.
Ще одна порада, яку я можу вам дати, - це спланувати, де ви хочете розмістити свою колонку. Просто виконавши це, Laravel розмістить ваш новий стовпець в кінці, можливо, після стовпця updated_at. (У більшості таблиць це є)
Ви хочете використовувати метод після, щоб ваш остаточний код виглядав так:
публічна функція вгору ()Schema :: table ('організації', функція ($ таблиця)
$ table-> integer ('size') -> after ('name') -> nullable ();
);
У цьому випадку Laravel розмістить ваш новий стовпець відразу після стовпця імен, щоб він виглядав гарно та впорядкований набагато краще.