Работа с двумя менеджерами сущностей в том же пакете в Symfony2

Я пытаюсь работать с двумя менеджерами сущностей для одного и того же пакета. Моя конфигурация такова:

orm: default_entity_manager: default entity_managers: electra: connection: electra mappings: XXDemoBundle: ~ default: connection: default mappings: XXDemoBundle: ~ 

Есть ли способ рассказать, какие права принадлежат кому-либо менеджеру? Теперь он падает, если я хочу работать со столовой, которая не относится к менеджеру сущностей по умолчанию.

благодаря

  • ОБНОВИТЬ

вот моя конфигурация для подключения:

 doctrine: dbal: default_connection: default connections: default: dbname: old_project user: root password: 123123 host: 1.1.1.1 port: 1 electra: dbname: electra user: root password: 123123 host: 2.2.2.2 port: 2 orm: default_entity_manager: electra entity_managers: electra: connection: electra mappings: XXDemoBundle: ~ default: connection: default mappings: XXDemoBundle: ~ 

Для использования нескольких entitymanager в том же пакете вы должны настроить параметры сопоставления для каждого entitymanager.

http://symfony.com/doc/current/reference/configuration/doctrine.html

Экземпляр файла конфигурации

 доктрина:
     DBAL:
         default_connection: по умолчанию
         соединения:
             по умолчанию:
                 драйвер:% database_driver%
                 host:% database_host%
                 порт:% database_port%
                 dbname:% database_name%
                 пользователь:% database_user%
                 пароль:% database_password%
                 charset: UTF8
             второй:
                 драйвер:% database_sqlite_driver%
                 хост: ~
                 порт: ~
                 dbname:% database_sqlite_shop_name%
                 путь:% database_sqlite_shop_name%
                 пользователь: ~
                 Пароль: ~
                 charset: UTF8

     ORM:
         auto_generate_proxy_classes:% kernel.debug%
         default_entity_manager: по умолчанию
         entity_managers:
             по умолчанию:
                 соединение: по умолчанию
                 отображения:
                     YourBundle:
                       # вы должны указать тип
                       type: "аннотация"    
                       # Каталог для объекта (относительно пучка пакетов)
                       dir: "Entity / FirstDb"        
                       # префикс 
                       prefix: "Your \ Bundle \ Entity \ FirstDb" 
             магазин:
                 соединение: второе
                 отображения:
                     YourBundle:
                       type: "аннотация"
                       #here второй путь, где объект для подключения
                       dir: "Entity / SecondDb" 
                       # префикс
                       prefix: "Your \ Bundle \ Entity \ SecondDb" 

Теперь вы можете использовать консоль для управления своим db с параметром -em

Пример: обновить базу данных для магазина entitymanager

 php app/console doctrine:schema:update --em=shop 

Чтение информации о карте из вашего \ Bundle \ Entity \ SecondDb

Пример: обновить базу данных для сущ.

 php app/console doctrine:schema:update 

Чтение информации о карте из вашего \ Bundle \ Entity \ FirstDb

ОК. Пытался отредактировать исходный пост, но он ждет рецензирования. Не уверен, сколько времени это займет. Попробуйте изменить свой конфиг:

 doctrine: dbal: default_connection: default connections: default: dbname: old_project user: root password: 123123 host: 1.1.1.1 port: 1 # Make an explicit connection just for clarity old_project: dbname: old_project user: root password: 123123 host: 1.1.1.1 port: 1 electra: dbname: electra user: root password: 123123 host: 2.2.2.2 port: 2 orm: # Humor me and add these auto_generate_proxy_classes: %kernel.debug% # auto_mapping: true default_entity_manager: electra entity_managers: # Make an explicit old_project em so default does not confuse us old_project: connection: old_project mappings: XXDemoBundle: ~ electra: connection: electra mappings: XXDemoBundle: ~ default: connection: default mappings: XXDemoBundle: ~ 

Теперь полностью сдуйте свой кеш, чтобы убедиться, а затем запустите:

 php app/console doctrine:mapping:info --em electra php app/console doctrine:mapping:info --em old_project 

Вы должны получить одинаковые результаты. Я тестировал это на своей системе, поэтому я уверен, что если вы этого не сделаете, у вас будет какая-то опечатка.

Так что картографическая информация работает. Следующий шаг – убедиться, что обе базы данных соответствуют вашей схеме сущности. Так сделайте так:

 php app/console doctrine:schema:update --em electra --dump-sql php app/console doctrine:schema:update --em old_project --dump-sql 

Также не должно производиться какой-либо вывод. Если это так, значит, ваша база данных не соответствует вашим объектам, и ее необходимо разрешить (возможно, используя параметр –force), прежде чем запросы будут работать.

После того, как базы данных находятся в синхронизации, вы должны, вероятно, использовать doctrine: query: dql и выполнить тестовый запрос для обоих менеджеров. Затем вернитесь в свой код.

=========================================

Теперь стало понятно, что реальная цель состоит в том, чтобы два менеджера сущностей указывали на один и тот же набор объектов, но каким-то образом указывали, что каждый менеджер объектов должен ограничиваться определенным набором этих объектов. И это не то, что S2 поддерживает из коробки.

Вы можете просмотреть руководство по Doctrine и посмотреть, как он обрабатывает метаданные объекта и, возможно, что-то с этим делать, но это может усложниться.

Единственное, что предлагает S2 – это возможность привязать диспетчер сущности ко всем сущностям в одном или нескольких пакетах, используя атрибут mapping. Если вы хотели бы поделиться тремя из семи объектов из одного пакета с другим пакетом, тогда вы просто воссоздаете эти объекты во втором комплекте. Возможно, расширив класс, чтобы избежать дублирования кода.

Я думаю, вы можете немного изменить свой подход. Если у вас есть набор основных объектов, совместно используемых с несколькими пакетами, тогда поместите их в свой собственный пакет. Затем каждый из них на пучке может добавлять дополнительные сущности.