Доктрина Миграции Re.арматура - PullRequest
5 голосов
/ 03 декабря 2010

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

В данный момент меня беспокоит только то, что [насколько я могу судить] Миграции доктрины не допускают модификаций приборов. Хотя я понимаю, что миграции нужны для изменения схемы, я думаю, что изменения в оснастке так же важны.

Я бы хотел, чтобы в справочных таблицах были привязки для моей базы данных (т. Е. * _Type, * _source и т. Д.), И я чувствую, что добавление / удаление / обновления строки должны обрабатываться и этими миграциями, поскольку так же важно, как и любое структурное изменение.

Если бы кто-нибудь мог указать мне правильное направление здесь, это было бы очень ценно.

Обновление

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

1 Ответ

2 голосов
/ 08 декабря 2010

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

По моему опыту, использование миграций во время разработки приложения не обязательно является наиболее полезным способом сделать это, особенно если разработчик A создает новую миграцию и не выполняет фиксацию сразу, а Developer B также создает новую миграцию, которая (неосознанно) конфликтует с миграцией разработчика А, а затем немедленно регистрируется. Разработчик А проверяет его (или ее) миграцию вскоре после этого, и у вас есть две конфликтующие миграции, и мир взрывается.

Я бы сказал, что лучший (хотя и более длинный) способ сделать это - внести изменения в схему в schema.yml, применить изменения схемы (с помощью частной миграции или вручную) и затем doctrine:data-dump и зафиксировать данные вашего прибора.

Если вы выбираете миграции в процессе разработки, возможно, вам следует рассмотреть возможность использования методов ->postUp() и ->preUp() класса Doctrine Migration для преобразования ваших данных на месте.

...