Ответ 1
Когда вы используете schema-tool
, история изменений базы данных не сохраняется, а в среде производства/промежуточной записи это большой недостаток.
Предположим, что у вас сложная структура базы данных в реальном проекте. И в следующем наборе изменений вы должны каким-то образом изменить базу данных. Например, контактные телефоны ваших пользователей должны храниться в другом формате, а не VARCHAR
, а три столбца SMALLINT
для кода страны, кода области и номера телефона.
Хорошо, что не так сложно определить запрос, который будет извлекать текущие данные, разделить его на три значения и вставить их обратно. Это, когда миграция вступает в игру: вы можете создавать свои новые поля, затем делать преобразования и, наконец, отбрасывать поле, в котором хранятся данные раньше.
И даже больше! Вы даже можете описать обратный процесс (миграция down
), когда вам нужно отменить изменения, внесенные в вашу миграцию. Предположим, что кто-то где-то сильно полагался на формат поля VARCHAR
, и теперь, когда вы изменили структуру, его фрагмент кода работает не так, как ожидалось. Итак, вы запускаете migration:down
, и все возвращается. В этом конкретном случае вы просто вернете старый столбец VARCHAR
и соедините значения обратно, а затем опустите поля.
Инструмент миграции Doctrine в основном выполняет большую часть работы для вас. Когда вы различаете свою схему, она генерирует все необходимые up
и down
, поэтому только вам нужно будет обработать данные, которые могут быть повреждены при применении миграции.
Кроме того, миграция - это то, что дает другим разработчикам знания вашей команды, когда пришло время обновлять свои схемы. Только с помощью schema-tool
ваши товарищи по команде должны будут запускать doctrine:schema:update
каждый раз, когда они будут тянуть, потому что они не узнают, действительно ли схема изменилась.
При использовании миграции вы всегда видите, что в папке переноса есть некоторые обновления, что означает, что вам нужно обновить вашу схему.