Учение Symfony: build --all --and-load БЕЗ УТРАТЫ ЗАПИСЕЙ В БАЗЕ ДАННЫХ - PullRequest
4 голосов
/ 07 февраля 2011

Я новичок в Symfony + Doctrine, но довольно опытный в разработке веб-приложений в целом (в основном с использованием Zend Framework). Я начал новый проект, используя Symfony, и мне это нравится.

У меня в папке / data / fixtures / есть несколько приборов, которые загружаются всякий раз, когда я обновляю схему и выполняю:

sf doctrine:build --all --and-load

Проблема в том, что добавлять приборы очень утомительно, тогда как интерфейс моего приложения довольно быстро загружает данные. Итак, я загружаю данные тестирования в базу данных (с помощью моего приложения), но затем всякий раз, когда я изменяю схему (и выполняю приведенный выше оператор), она возвращает данные только к тому, что находится в приборах.

В руководстве, которое я прочитал, опция --and-append не будет перезаписывать данные в базе данных. Но опция --all говорит, что она сбрасывает базу данных.

Очевидно, что если я удалю столбец из схемы, я потеряю эту информацию, но я просто хочу сохранить свои новые записи.

Извините, если я упускаю что-то очень очевидное. Заранее благодарим за любую помощь, которую вы можете оказать!

Ответы [ 4 ]

6 голосов
/ 07 февраля 2011

Использование symfony doctrine:build --all-classes

Из документации (symfony help doctrine:build):

You can also generate only class files by using the --all-classes shortcut
option. When this option is used alone, the database will not be modified.

  ./symfony doctrine:build --all-classes
2 голосов
/ 08 февраля 2011

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

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

0 голосов
/ 07 февраля 2011

Вы можете внести изменения в БД с помощью миграции доктрин или самостоятельно с помощью сценариев sql (что является IMO более безопасным вариантом) или вручную в БД, если вы разрабатываете. Обычно я просто перестраиваю классы модели, чтобы отразить новые изменения схемы (через doctrine: build), и просто делаю полное удаление базы данных и периодически воссоздаю, чтобы убедиться, что все работает нормально.

0 голосов
/ 07 февраля 2011

build --all удаляет базу данных, и вы теряете информацию, которая в ней.--and-load загружает все, что у вас есть в ваших приборах, обратно в него.Так что, насколько я знаю, нет ни одной команды, чтобы делать то, что вы ищете.Из того, что я понял, --and-load и --and-append схожи, так как вы также можете многократно запускать doctrine:data-load, и это не сотрет существующие данные.

Короче говоря, чтобы сохранитьданные, не запускайте build --all, но вносите изменения в базу данных с помощью SQL, обновляйте схему, а затем просто заново генерируйте модели.

...