Схема доктрины меняется при сохранении данных? - PullRequest
0 голосов
/ 25 июля 2010

Мы разрабатываем веб-сайт с поддержкой Doctrine, используя YAML для определения нашей схемы.Наша схема регулярно меняется (включая отношения fk), поэтому нам нужно сделать много:

    Doctrine::generateModelsFromYaml(APPPATH . 'models/yaml', APPPATH . 'models', array('generateTableClasses' => true));
    Doctrine::dropDatabases();
    Doctrine::createDatabases();
    Doctrine::createTablesFromModels();

Мы хотели бы сохранить существующие данные и сохранить их в заново созданной базе данных.Поэтому я копирую данные во временную базу данных до того, как основная база данных будет удалена.

Как получить данные из «копии БД старой схемы» в «БД новой схемы»? (новая схема содержит только НОВЫЕ столбцы, НИКАКИЕ КОЛОННЫ НЕ УДАЛЕНЫ)

ПРИМЕЧАНИЕ:

Это, очевидно, не работает, потому что количество столбцов не совпадает.

SELECT * FROM copy.Table INTO newscheme.Table

Это, очевидно, работает, однако это отнимает слишком много временинаписать для каждой таблицы:

SELECT old.col, old.col2, old.col3,'somenewdefaultvalue' FROM copy.Table as old INTO newscheme.Table

Ответы [ 2 ]

1 голос
/ 25 июля 2010

Вы смотрели на Миграции ? Они позволяют вам изменять схему вашей базы данных программным способом. Без потери данных (если, конечно, вы не удалите столбцы)

0 голосов
/ 25 июля 2010

Как насчет написания скрипта (например, с использованием классов Doctrine), который анализирует файлы схемы yaml (как предыдущей, так и "следующей" версии) и генерирует сценарии sql для запуска?Это была бы разовая работа и не требовавшая такой большой работы.Преимущество создания сценариев переноса вручную состоит в том, что вы можете легко сохранять их в системе управления версиями и позже воспроизводить шаги версии.Если это не то, что вам нужно, вы можете просто собрать изменения в коде и сделать это напрямую через драйвер базы данных.

Конечно, чем более необычными становятся изменения вашей схемы, тем сложнее будет обслуживание, то есть изменения имени столбца, от нуля до нуля и т. Д.

...