#mysql #laravel #migration
#mysql #laravel #миграция
Вопрос:
У нас довольно много миграций в нашем приложении Laravel. Сейчас мы вносим некоторые изменения, которые делают некоторые таблицы устаревшими и где мы на самом деле хотим переименовать определенные столбцы в некоторых таблицах.
Какова наилучшая практика для выполнения этого изменения?
- Сохраняете ли вы старые миграции такими, какие они есть, и пытаетесь ли добавить миграцию, которая соответствующим образом изменяет все затронутые таблицы и столбцы?
- Можете ли вы просто обновить старые миграции и удалить те для таблиц, которые больше не нужны?
Я уверен, что в обоих подходах есть «за» и «против».
Комментарии:
1. Цель миграций — предоставить путь для нескольких разных баз данных, чтобы они оставались совместимыми со схемой приложения с течением времени, но это не всегда необходимо. Например, если вы единственный разработчик или вы еще не работаете, не важно иметь полную историю каждого изменения схемы. Лично я регулярно консолидирую свои миграции, когда это уместно.
Ответ №1:
Я лично считаю, что первый подход является наилучшей практикой, и вот почему. Мы знаем, что миграции сохраняются в таблице миграций при миграции, поэтому они переносятся только один раз. Теперь, если вы обновите одну и попытаетесь перенести, вы ничего не получите, потому что эта миграция уже выполнена. Что касается удаления миграции, это действительно не рекомендуется, поскольку в конечном итоге вам может потребоваться смена серверов или новая база данных, и это может вызвать у вас проблемы.
Очень важно поддерживать поток миграций. Даже если это означает добавление и удаление таблиц. Конечно, это сделает вашу папку migrations больше и громоздче, но это безопасный выбор. Вы можете избежать этого, используя надлежащее планирование проекта и пытаясь свести к минимуму количество миграций.
Комментарии:
1. Спасибо. Я ценю ваш ответ. Означает ли это, что вам нужно изменить имена таблиц / столбцов обратно в
down()
методе миграции или они останутся пустыми?2. @molerat цель метода down — отменить миграцию. Обычно лучше всего отменить то, что вы сделали в методе up, даже если вы знаете, что вы никогда не сделаете этого наоборот. Поэтому предпочтительнее, чтобы вы никогда не оставляли их пустыми
Ответ №2:
Чтобы внести эти изменения, создайте новую миграцию, которая удалит старые таблицы и переименует поля, которые нуждаются в переименовании.
Что касается пункта 2, то можно обновлять старые миграции во время локальной разработки. И только в том случае, если миграция не выполнялась на производственном сервере.
Как правило, это приемлемо на начальной стадии разработки проекта.
Запуск php artisan migrate
на рабочем сервере с измененным файлом миграции не обновит базу данных (поскольку база данных регистрирует выполненные миграции).
Как упоминал @khaldoun-nd, лучше поддерживать поток миграций, создавая их только при необходимости и развертывая, как только вы убедитесь, что ваш предполагаемый код работает хорошо.