Лучшие практики для подключения к базе данных через Doctrine в Symfony Bundle - PullRequest
0 голосов
/ 11 февраля 2020

В моем комплекте я создаю отдельное соединение с базой данных и EntityManager для него. Все работает отлично, за исключением тех двух вещей, которые не отображаются в профилировщике разработки. Существует только EntityManager по умолчанию и соединение по умолчанию.

Так что в основном я создал 3 новых определения сервиса для Doctrine \ Common \ EventManager, Doctrine \ DBAL \ Connection и Doctrine \ ORM \ EntityManager. Я уже пытался добавить эти новые определения сервиса в ContainerBuilder с тем же соглашением об именах, которое используется мостом doctrine, но они все равно не будут отображаться в профилировщике. Соединение работает нормально, но я хочу отладить его и интегрировать в жизненный цикл Symfony.

Вопрос:

Как лучше создать отдельную базу данных? соединение через Doctrine внутри пакета Symfony, если приложение Symfony настроено только на одно соединение?

1 Ответ

0 голосов
/ 11 февраля 2020

Полагаю, вам стоит взглянуть на это до c. Там описано, как добавить еще один EntityManager, что означает другое соединение. Первым шагом является создание конфигурации.

Особо взгляните на doctrine .yaml configuration:

# config/packages/doctrine.yaml
doctrine:
    doctrine:
        dbal:
            default_connection: default
            connections:
                default:
                    # configure these for your database server
                    url: '%env(DATABASE_URL)%'
                    driver: 'pdo_mysql'
                    server_version: '5.7'
                    charset: utf8mb4
                customer:
                    # configure these for your database server
                    url: '%env(DATABASE_CUSTOMER_URL)%'
                    driver: 'pdo_mysql'
                    server_version: '5.7'
                    charset: utf8mb4
        orm:
            default_entity_manager: default
            entity_managers:
                default:
                    connection: default
                    mappings:
                        Main:
                            is_bundle: false
                            type: annotation
                            dir: '%kernel.project_dir%/src/Entity/Main'
                            prefix: 'App\Entity\Main'
                            alias: Main
                customer:
                    connection: customer
                    mappings:
                        Customer:
                            is_bundle: false
                            type: annotation
                            dir: '%kernel.project_dir%/src/Entity/Customer'
                            prefix: 'App\Entity\Customer'
                            alias: Customer

Выше два менеджера сущностей, 'default' и 'customer'. Есть также два центра, по одному для каждого менеджера.

Если конфигурация верна, вы получите доступ к этим менеджерам, передав их имена методу getManager.

$entityManager = $this->getDoctrine()->getManager('default');
$customerEntityManager = $this->getDoctrine()->getManager('customer');

Если вы не можете редактировать конфигурацию: А как насчет создания пользовательского класса (Manager или чего-то еще), в котором вы будете вручную создавать соединение. Взгляните на это, оно должно вам помочь. установление соединения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...