Сохраняете ли вы исходные миграции Laravel, когда они устаревают?

#mysql #laravel #migration

#mysql #laravel #миграция

Вопрос:

У нас довольно много миграций в нашем приложении Laravel. Сейчас мы вносим некоторые изменения, которые делают некоторые таблицы устаревшими и где мы на самом деле хотим переименовать определенные столбцы в некоторых таблицах.

Какова наилучшая практика для выполнения этого изменения?

  1. Сохраняете ли вы старые миграции такими, какие они есть, и пытаетесь ли добавить миграцию, которая соответствующим образом изменяет все затронутые таблицы и столбцы?
  2. Можете ли вы просто обновить старые миграции и удалить те для таблиц, которые больше не нужны?

Я уверен, что в обоих подходах есть «за» и «против».

Комментарии:

1. Цель миграций — предоставить путь для нескольких разных баз данных, чтобы они оставались совместимыми со схемой приложения с течением времени, но это не всегда необходимо. Например, если вы единственный разработчик или вы еще не работаете, не важно иметь полную историю каждого изменения схемы. Лично я регулярно консолидирую свои миграции, когда это уместно.

Ответ №1:

Я лично считаю, что первый подход является наилучшей практикой, и вот почему. Мы знаем, что миграции сохраняются в таблице миграций при миграции, поэтому они переносятся только один раз. Теперь, если вы обновите одну и попытаетесь перенести, вы ничего не получите, потому что эта миграция уже выполнена. Что касается удаления миграции, это действительно не рекомендуется, поскольку в конечном итоге вам может потребоваться смена серверов или новая база данных, и это может вызвать у вас проблемы.

Очень важно поддерживать поток миграций. Даже если это означает добавление и удаление таблиц. Конечно, это сделает вашу папку migrations больше и громоздче, но это безопасный выбор. Вы можете избежать этого, используя надлежащее планирование проекта и пытаясь свести к минимуму количество миграций.

Комментарии:

1. Спасибо. Я ценю ваш ответ. Означает ли это, что вам нужно изменить имена таблиц / столбцов обратно в down() методе миграции или они останутся пустыми?

2. @molerat цель метода down — отменить миграцию. Обычно лучше всего отменить то, что вы сделали в методе up, даже если вы знаете, что вы никогда не сделаете этого наоборот. Поэтому предпочтительнее, чтобы вы никогда не оставляли их пустыми

Ответ №2:

Чтобы внести эти изменения, создайте новую миграцию, которая удалит старые таблицы и переименует поля, которые нуждаются в переименовании.

Что касается пункта 2, то можно обновлять старые миграции во время локальной разработки. И только в том случае, если миграция не выполнялась на производственном сервере.

Как правило, это приемлемо на начальной стадии разработки проекта.

Запуск php artisan migrate на рабочем сервере с измененным файлом миграции не обновит базу данных (поскольку база данных регистрирует выполненные миграции).

Как упоминал @khaldoun-nd, лучше поддерживать поток миграций, создавая их только при необходимости и развертывая, как только вы убедитесь, что ваш предполагаемый код работает хорошо.