Symfony 2: Как избежать удаления таблицы сеансов при миграции доктрины?

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

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

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


person HappyDeveloper    schedule 08.07.2011    source источник


Ответы (3)


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

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

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

person WhyteWolf    schedule 23.04.2012

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

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

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

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

person Sam    schedule 27.11.2013
comment
Я могу подтвердить, что это прекрасно работает в Symfony4, если вы добавите его в доктрину.yaml. - person Mark B; 14.03.2019

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

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

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

person Manne W    schedule 17.08.2011
comment
Значит, у вас нет возможности поместить все содержимое PdoSessionStorage (в основном таблицу сеансов) в другую базу данных? - person Manne W; 17.08.2011
comment
Да, но я думаю, что это больше проблем. И я не знаю, хорошо ли иметь дополнительное соединение с БД для производительности. Не добавит ли это накладных расходов? - person HappyDeveloper; 18.08.2011
comment
Вам определенно не нужно использовать другую выделенную базу данных только для таблицы сеанса. Поскольку @Sam уже опубликовал ответ выше, достаточно настроить доктрину для игнорирования таблицы сеансов. Я пишу это в 2020 году, ответ Сэма был в 2013 году, а этот (в настоящее время) неверный ответ относится к 2011 году; вот почему я не хочу отрицать ответ, поскольку он может быть действителен в 2011 году. - person Lashae; 04.02.2020