Saludos
Tengo una duda. Tengo una base de datos de solo lecura, de las cuales importe varias tablas (Relacionadas) necesarias para este caso, dentro de ExternoBundle.
Mi duda necesito crea una entidad dentro del Externobundle que tiene relacion con las entidades creadas con la base de datos de lectura.
doctrine: # ... orm: # ... entity_managers: default: connection: default mappings: TestBundle: ~ externo: connection: externo mappings: ExternoBundle: ~
Esta nueva entidad se almacenara en la base de datos datos por defecto. El problema es que cada bundle está asociado a administrador de entidades y este a la vez una base de datos especifica, por tanto no puedo crear esta entidad dentro de este Externobundle
, porque este está asociado con el entity manager externo
.
Por lo tanto debo crearlo sobre TestBundle
.
Respuestas
Eso de "un solo entity manager por cada bundle" no es una limitación real de Doctrine+Symfony, sino algo que sucede cuando se aplica la configuración por defecto de Symfony.
En teoría, en el archivo config.yml
de tu aplicación tendrías que decirle a Symfony qué entidades de Doctrine cargar y en qué entity manager hacerlo. Como el 99% de las aplicaciones quiere cargar todas las entidades en el único entity manager que existe, configurar todo esto a mano sería aburridísimo.
En tu caso sin embargo, la configuración por defecto no te sirve de nada, así que tiene que configurarlo a mano. Para ello, lo primero que te aconsejo es que crees subdirectorios dentro del direcotrio Entity/
para separar mejor los dos tipos de entidades:
src/Acme/ExternoBundle/Entity/BD1/Entidad1.php src/Acme/ExternoBundle/Entity/BD1/Entidad2.php src/Acme/ExternoBundle/Entity/BD2/Entidad3.php
Después, en la configuración de Doctrine sólo tienes que decirle qué entity manager maneja cada subdirectorio de entidades:
doctrine: # ... orm: # ... entity_managers: default: connection: default mappings: ExternoBundle: type: "annotation" dir: "Entity/BD1" prefix: "ExternoBundle\Entity\BD1" externo: connection: externo mappings: ExternoBundle: type: "annotation" dir: "Entity/BD2" prefix: "ExternoBundle\Entity\BD2"
@javiereguiluz
Gracias @javiereguiluz,
consulta,
- type: es el tipo de mapeo de la entidad.
-
prefix: Tengo una duda en este punto. el "prefix + dir" si ese es el caso el prefix deberia se asi: "Aplicacion\ExternoBundle" o esta bien como esta señalado.
- Se podria especificar una entity especifica.
Gracias, nuevamente.
@dariongg
Ejecuté el comando doctrine:generate:entities
sobre la base de datos de apoyo:
EnternoBundle/Entity/Default // BD Principal EnternoBundle/Entity/Externo // BD Apoyo
$ doctrine:generate:entities EnternoBundle:Externo/entity1
Me arroja un error que no está mapeada la entidad. Volviendo a la estructura por defecto si lo realiza.
@dariongg