Symfony doctrine: build-all-and-load без потери записей в базе данных



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



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



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


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



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



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

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

4 ответов:

Использовать 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

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

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

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

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

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

Comments

    Ничего не найдено.