Теперь я попробовал обновиться до 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 и работала нормально.
< h2>Что я пробовал/идеи:
- Создал прослушиватели событий для событий postGenerateSchema и loadClassMetadata и смог получать имена таблиц и схем . К сожалению, я не смог найти способ действительно изменить эту информацию, чтобы удалить имя схемы или объединить ее с именем таблицы.
- Была ли идея создать свою собственную подкласс атрибута ORM\Table, но он помечен как окончательный.
- Пытался установить схему в #[ORM\Table(schema: ' MY_STUFF', name: 'ITEMS_VIEW')] только в определенной среде, но все значения должны быть постоянными, поэтому в атрибуте не допускается никакая логика.
- Я мог бы переключиться на staticphp< /code>, как упоминалось в документации для DoctrineBundle, чтобы добавить логику, но я должен настроить всю сущность через PHP, не имея возможности использовать атрибуты, верно?
- Было бы неплохо добавить " имя схемы по умолчанию» на основе подключения, поэтому я мог изменить его для каждой среды, но это кажется невозможным.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-produc