Symfony 2: Как избежать смещения таблицы сеансов при миграции доктрин? - PullRequest
11 голосов
/ 08 июля 2011

Я новичок в миграциях, и я пытаюсь придерживаться автоматически сгенерированных:

$ php app/console doctrine:migrations:diff
$ php app/console doctrine:migrations:migrate

Проблема в том, что это удаляет мою таблицу сеансов.Что я могу сделать, чтобы избежать этого?

Ответы [ 3 ]

25 голосов
/ 27 ноября 2013

Другой вариант - просто сказать Doctrine игнорировать таблицу.Вы можете использовать опцию schema_filter, как описано в этой публикации SO .

Итак, если ваша таблица называется sessions, добавьте следующее в config.yml (Symfony <4) или <em>doctrine.yaml (Symfony> = 4):

doctrine:
    dbal:
      # standard database config here
      schema_filter: ~^(?!sessions)~

Нам пришлось игнорировать большое количество таблиц, поэтому мы выбрали противоположный подход - мывелел Doctrine рассматривать только таблицы, начинающиеся с определенного префикса, и настраивал прослушиватели, чтобы все наши таблицы, управляемые Doctrine, имели префикс.Использование прослушивателей для префиксов таблиц задокументировано в http://docs.doctrine -project.org / ru / latest / cookbook / sql-table-prefixes.html , и есть SO-сообщение о его стороне Symfony здесь .

2 голосов
/ 24 апреля 2012

Я знаю, что опоздал на этот вопрос, но подумал, что предложу предложение.

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

см .: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html

0 голосов
/ 17 августа 2011

Когда вы говорите «таблица сессий», я предполагаю, что вы имеете в виду таблицу сессий для PdoSessionStorage?(просто чтобы быть уверенным, что мы говорим об одном и том же :-))

У меня была похожая проблема, и единственным постоянным (и не сложным) решением было просто поместить ваши сессии в другую базу данных (и обновите конфигурацию соответственно).Но для этого требуется разрешение на создание дополнительной БД.

Если у вас нет такой возможности, я посмотрю на какое-то другое решение, но, возможно, упомянутое выше работает для вас: -)

...