Проблема
Добавление новых столбцов в ваши миграции Laravel - обычное дело. Приложения должны быть масштабируемыми, а это означает, что добавление новых функций способствует дальнейшему развитию вашего приложения.
Очень часто новым разработчикам Laravel необходимо запускать свои миграции, но они не уверены, что миграции могут откатываться и мигрировать несколько раз, ничего не нарушая.
Хотя это не наша цель, я думаю, что было важно заявить, что прежде чем мы перейдем к нашей проблеме.
Ниже приведена распространенная проблема, которую новые разработчики Laravel попытаются решить, когда они захотят добавить новый столбец в существующую таблицу.
Итак, к этому моменту они уже сделали что-то вроде:
публичная функция вверх ()Schema :: create ('организации', function ($ table)
$ table-> приращения ('идентификатор');
$ table-> string ('имя') -> nullable ();
$ table-> text ('о') -> nullable ();
);
Это создаст для них новую таблицу. И чтобы сделать это чистым, вы также должны добавить функцию вниз и в этом случае просто отбросить всю таблицу. Функция down будет запущена, когда вы захотите откатить миграцию.
Прыгая через все это, настоящая проблема обнаруживается, когда они забывают один столбец и хотят добавить его позже, чтобы они создали новый файл миграции (класс), попробуйте запустить что-то вроде:
публичная функция вверх ()Schema :: create ('организации', function ($ table)
$ table-> integer ('размер') -> nullable ();
);
Они надеются добавить новый размер столбца в существующую таблицу.
Теперь посмотрим, что происходит и как этого не допустить.
Решение
Основная проблема здесь в том, что новые разработчики часто не замечают, замечая статическое имя метода схемы . Вы используете create только тогда, когда изначально создаете свою таблицу. Если вам нужно в любое время обновить таблицу, вы можете использовать вместо нее table.
Итак, реальная функция должна быть такой:
публичная функция вверх ()Schema :: table ('организации', function ($ table)
$ table-> integer ('размер') -> nullable ();
);
А функция вниз будет такой:
публичная функция вниз ()Schema :: table ('организации', function ($ table)
$ table-> dropColumn ('размер');
);
Я лично предлагаю вам после создания нового (изменяемого) файла миграции сделать следующее:
- Запустите миграцию
- Проверить, добавлен ли столбец в таблицу
- Откатите миграцию, запустив php artisan migrate: rollback
- Убедитесь, что ничего не происходит
- Повторите шаги 2 и 3 еще раз, чтобы убедиться, что вы можете замкнуть полный круг миграции
п
Еще один совет
Это пригодится на более позднем этапе, если вы хотите автоматизировать развертывание и ваш скрипт должен выполнить откат.
Еще один совет, который я могу вам дать, - это спланировать, где вы хотите разместить свою колонку. Просто сделав это, Laravel поместит ваш новый столбец в конец, вероятно, после столбца updated_at. (В большинстве таблиц это есть)
Вы хотите использовать метод после, чтобы ваш окончательный код выглядел так:
публичная функция вверх ()Schema :: table ('организации', function ($ table)
$ table-> integer ('размер') -> после ('имя') -> nullable ();
);
В этом случае Laravel разместит ваш новый столбец сразу после столбца имени, чтобы он выглядел красиво и был организован намного лучше.