Viene de la documentación de Symfony
Si en nuestro proyecto necesitamos gestionar varias conexiones a bases de datos, bien sea porque tenemos diferentes entidades en diferentes bases de datos, o bien porque tenemos las mismas entidades en varias bases de datos podemos configurar nuestra aplicación para usar varias conexiones
doctrine:
dbal:
connections:
default:
url: '%env(resolve:DATABASE_URL)%'
customer:
url: '%env(resolve:CUSTOMER_DATABASE_URL)%'
default_connection: default
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
Main:
is_bundle: false
dir: '%kernel.project_dir%/src/Entity/Main'
prefix: 'App\Entity\Main'
alias: Main
customer:
connection: customer
mappings:
Customer:
is_bundle: false
dir: '%kernel.project_dir%/src/Entity/Customer'
prefix: 'App\Entity\Customer'
alias: Customer
En este ejmplo que viene de la documentación de Symfony podemos ver como configurar dos conexiones distintas (default y customer) y sus entity managers asociados, cada uno con un mapeo de entidades diferentes (se puede usar el mismo mapeo de entidades).
Hay que tener en cuenta que cuando configuramos nuestra aplicacion hay que hacer una serie de ajustes
- A la hora de utilizar comandos de base de datos hay que indicar la conexion que queremos usar usando los parámetros --connection o --em
- Cuando queremos obtener un entitymanager hay que tener en cuenta que podemos inyectarlo utilizando el nombre del entity manager que hemos definido, con la configuración anterior si inyectamos `EntityManagerInterface $customerEntityManager` obtedríamos el entityManger customer. En caso de que no supieramos de antemano que entity_manager se va a usar podremos obtenerlos a partir del ManagerRegistry de Doctrine, siguiendo con el ejemplo anterior $customerEntityManager = $managerRegistry->getManager('customer') habría que hacer lo mismo si solo queremos obtener un repositorio ` $customersRepository = $managerRegistry->getRepository(Customer::class, 'customer');`
- Si una entidad puede ser gestionada por varios entity managers distintos puede dar lugar a comportamientos inesperados cuando creamos repositorios que extienden ServiceEntityRepository, en ese caso nuestros repositorios tienen que extender de EntityRepository y no ser inyectados
symfony