Как использовать базу данных sqlite для тестирования, игнорируя имя схемы, необходимое в производствеPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как использовать базу данных sqlite для тестирования, игнорируя имя схемы, необходимое в производстве

Сообщение Anonymous »

Я использую Symfony Framework 6.4, и до сих пор у меня были ORM 2.19 и DBAL 3.9 от Doctrine.
Теперь я попробовал обновиться до ORM 3.x и DBAL 4.x, но столкнулся с проблема, которую я не могу решить из-за некоторых нарушений BC, перечисленных здесь для ORM и здесь для DBAL, касающихся удаления эмуляции схемы sqlite.
Ситуация:
  • Производственная БД (Oracle) не находится под моим контролем и содержит все таблицы в схеме/пространстве имен, назовем ее MY_STUFF.
  • БД для тестирования/разработки — это sqlite, который не поддерживает пространства имен схем.
  • Объекты атрибутируются с помощью #[ORM\Table(schema: 'MY_STUFF', name: 'ITEMS_VIEW' )].
  • В config/packages/doctrine.yaml у меня настроено соединение sqlite для тестовой и среды разработки.
  • При использовании DBAL4/ORM3 в режиме тестирования и разработки, например, попробуйте вставить INSERT INTO MY_STUFF.ITEMS_VIEW, что не удастся. В старых версиях была эмуляция схемы, которая преобразовывала имя таблицы в MY_STUFF__ITEMS_VIEW и работала нормально.
Так что теперь мне нужно поработать над недостающими Схема поддерживаю сам, но не могу понять, как это сделать. В документации ORM 3 есть пример того, как изменять имена таблиц через прослушиватель, но он такой же, как и в ORM 2, и не работает из-за удаленной функциональности (см. разрывы BC).
< h2>Что я пробовал/идеи:
  • Создал прослушиватели событий для событий postGenerateSchema и loadClassMetadata и смог получать имена таблиц и схем . К сожалению, я не смог найти способ действительно изменить эту информацию, чтобы удалить имя схемы или объединить ее с именем таблицы.
  • Была ли идея создать свою собственную подкласс атрибута ORM\Table, но он помечен как окончательный.
  • Пытался установить схему в #[ORM\Table(schema: ' MY_STUFF', name: 'ITEMS_VIEW')] только в определенной среде, но все значения должны быть постоянными, поэтому в атрибуте не допускается никакая логика.
  • Я мог бы переключиться на staticphp< /code>, как упоминалось в документации для DoctrineBundle, чтобы добавить логику, но я должен настроить всю сущность через PHP, не имея возможности использовать атрибуты, верно?
  • Было бы неплохо добавить " имя схемы по умолчанию» на основе подключения, поэтому я мог изменить его для каждой среды, но это кажется невозможным.
Надеюсь, кто-нибудь сталкивался с похожая проблема и есть решение. Вариант 1 кажется наиболее многообещающим.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-produc
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»