#php #symfony #doctrine
Вопрос:
Я искал, чтобы Доктрина игнорировала все таблицы в БД, за исключением сущностей в моем приложении. Я пытался сделать это с помощью опции schema_filter в конфигурации доктрины, однако у меня есть большое количество схем (я использую PostgreSQL) и таблиц в БД, которые мне не нужно просматривать с помощью приложения. Таким образом, самым простым решением, IMO, было бы игнорировать все таблицы, за исключением папки AppEntityCustom (это общая база данных с другими приложениями / пользователями, которые могут создавать схемы / таблицы).
Кроме того, я использую несколько соединений, и я не знаю, как решить мою проблему с этого момента…
Моя конфигурация/пакеты/доктрина.файл yaml :
doctrine:
dbal:
default_connection: classic
connections:
classic:
url: "%env(resolve:DATABASE_URL)%"
driver: "pdo_pgsql"
server_version: "11.5"
charset: "utf8"
custom:
url: "%env(resolve:DATABASE_URL_CUSTOM)%"
driver: "pdo_pgsql"
server_version: "11.5"
charset: "utf8"
schema_filter: "How to filter all tables in DB except for entities table in AppEntityCustom* ?"
orm:
default_entity_manager: "classic"
entity_managers:
classic:
naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
connection: "api"
mappings:
Main:
is_bundle: false
type: annotation
dir: "%kernel.project_dir%/src/Entity/Classic"
prefix: 'AppEntityClassic'
alias: "Classic"
custom:
connection: "custom"
mappings:
Main:
is_bundle: false
type: annotation
dir: "%kernel.project_dir%/src/Entity/Custom"
prefix: 'AppEntityCustom'
alias: "custom"
И у меня также есть конфигурационный файл 2 миграции, потому что это было бы здорово для разделения миграции / БД (я не знаю, лучший ли это способ заставить его работать) :
конфигурация/classic_migration.ямл :
doctrine_migrations:
migrations_paths:
'DoctrineMigrationsClassic': '%kernel.project_dir%/migrations/Classic'
enable_profiler: '%kernel.debug%'
storage:
table_storage:
table_name: 'public.migrations'
em: classic
конфигурация/custom_migration.yaml:
doctrine_migrations:
migrations_paths:
'DoctrineMigrationsCustom': '%kernel.project_dir%/migrations/Custom'
enable_profiler: '%kernel.debug%'
storage:
table_storage:
table_name: 'public.migrations'
em: custom
Может ли кто-нибудь дать мне какой-нибудь трюк / совет ?
Спасибо.
Комментарии:
1. Прямым способом заставить доктрину игнорировать нежелательные таблицы от одного из менеджеров сущностей было бы создание отдельного подключения пользователя с доступом только к требуемым базам данных и/или таблицам, которыми управляет ORM. Это связано с утверждением, что доктрина ORM используется для сопоставления и предоставления базы данных и таблиц, поскольку разработка схем базы данных и таблиц вне ORM не рекомендуется. Если вручную отправлять собственные запросы к другим таблицам, которые не управляются ORM, вам потребуется отдельное подключение пользователь с доступом для поддержки этих особых случаев.
2. Косвенным способом игнорирования других таблиц, которыми не управляет ORM, является создание таблиц с префиксом для имен таблиц, которыми
schema_filter
правило может явно управлять. например:schema_filter: '~^(orm_)~'
для включения только таблиц, которые начинаются сorm_
, в Интернете есть несколько учебных пособий о том, как реализовать автоматические префиксы имен таблиц в Доктрине.3. Спасибо за ваш ответ, вот что я сделал. Я не хотел добавлять префиксы ко всем своим таблицам, но если у них нет другого решения, я удовлетворюсь этим методом. Еще раз спасибо.