Как подменить db connection у entity manager репозитория на лету в Symfony?

В Symfony можно подменить db connection у entity manager репозитория на лету с помощью модификации конфигурации сервисов.

Для начала, удостоверьтесь, что у вас установлен и настроен DoctrineBundle. Затем перейдите к файлу services.yaml в папке config.

В этом файле вам нужно определить сервис, который будет использоваться для создания и изменения db connection. Допустим, вы хотите использовать сервис с именем custom_db_connection.

Для этого в файле services.yaml добавьте следующий код:

services:
    custom_db_connection:
        class: DoctrineDBALConnection
        # здесь указываете настройки для вашего сервиса db connection

Теперь нужно изменить конфигурацию entity manager репозитория, чтобы он использовал ваш новый сервис db connection.

В папке config/packages создайте файл doctrine.yaml, если его еще нет. Измените его содержимое следующим образом:

doctrine:
    dbal:
        # здесь укажите настройки для вашего первоначального db connection
    orm:
        default_entity_manager: default
        entity_managers:
            default:
                connection: custom_db_connection # здесь указываем имя вашего сервиса db connection

Теперь ваш entity manager репозитория будет использовать ваш custom_db_connection как основной соединение с базой данных.

Также, вы можете создать дополнительные entity manager репозитории и указать для каждого из них свое соединение:

doctrine:
    dbal:
        # здесь укажите настройки для вашего первоначального db connection
        connections:
            custom_connection:
                # здесь указываете настройки для вашего второго db connection
    orm:
        default_entity_manager: default
        entity_managers:
            default:
                connection: default_connection
            custom_manager:
                connection: custom_connection # здесь указываем имя второго соединения

В итоге, вы сможете динамически подменять db connection у entity manager репозитория на лету, просто изменяя конфигурацию сервисов Symfony.