Порой возникают ситуации в Laravel при создании отдельных таблиц БД, когда порядок миграций влияет на успешное выполнение операций по их развёртыванию.
Например, ситуация
Вы делаете проект на Laravel, и возникла необходимость добавить в базу данных новую таблицу (unit_orders
- в качестве примера), которая будет связана своим первичным ключом с таблицей (employers
- в качестве примера), ранее созданной.
Перед добавлением новой таблицы (путём миграции) откатываем все существующие миграции до исходного состояния командой php artisan migrate:rollback
.
Далее создаем новую миграцию для нашей новой таблицы с помощью команды php artisan make:model UnitOrder -mcr
.
В итоге создается необходимый нам «букет» - контроллер, модель и миграция. Но созданная миграция оказывается внизу.
В папке migrations
файлы миграций будут расположены в хронологическом порядке от дат (временных меток) их создания.
Если сейчас накатить все миграции для нашего проекта, то мы получим ошибку следующего типа:
"Уже созданная таблица не может добавить внешний ключ той таблицы, которая ещё не существует."
Таким образом, для правильного выполнения всех миграций (создания всех таблиц проекта) необходимо последнюю миграцию по созданию нашей новой таблицы unit_orders
перенести перед ранее созданной таблицей employers
. Это делается изменением даты её создания на произвольную дату, которая должна предшествовать дате создания существующей таблицы employers
.
Перед выполнением миграций полностью очистите базу данных (это можно сделать даже вручную через графический клиент по работе с БД, если со стороны команды php artisan migrate:rollback
возникают какие-либо ошибки).
После этого выполняем стандартную команду php artisan migrate
, и все миграции накатываются успешно.