2012-07-13 18 views
16

Me pregunto si es posible crear una relación entre dos entidades que residen en bases de datos separadas.Uso de relaciones con múltiples administradores de entidades

Por ejemplo, si tomamos la solución que se encuentra aquí http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html y creamos una relación de uno a muchos con los usuarios en la base de datos del cliente a las publicaciones en la base de datos predeterminada.

¿Es esto algo compatible con Symfony2 y Doctrine?

Respuesta

25

El uso de diferentes administradores de objetos (administradores de entidades) no permite que los gráficos de objeto se crucen. Ese caso es demasiado complejo y no está gestionado por Doctrine ORM.

Si necesita un caso como este, mantenga los gráficos de objetos desconectados guardando los identificadores de los objetos relacionados (estilo antiguo) en lugar de hacer una referencia a ellos, luego obtenga manualmente los objetos a través de los servicios. Puede encontrar un buen ejemplo de cómo esto funcionaría en un example of connection between Doctrine2 ORM and Doctrine2 MongoDB ODM. Alternativamente, también puede usar un detector de eventos @PostLoad que rellena datos en sus entidades creando el enlace a través de los repositorios que he vinculado en el ejemplo. Lo mismo para @PostPersist (que en su lugar debería extraer los identificadores para los objetos relacionados), pero tenga en cuenta que esta técnica puede ser realmente desordenada.

Además, si su RDBMS admite operaciones entre bases de datos en un solo host, puede simplemente usar un único EntityManager y hacer referencia a la otra tabla con @ORM\Table(name="schemaname.tablename").

+6

* si su RDBMS admite operaciones entre bases de datos en un solo host, puede simplemente usar un solo EntityManager y hacer referencia a la otra tabla *. Excelente consejo ¡Gracias! – noisebleed

+2

Descubrió que Doctrine solo detecta cambios de esquema en las tablas 'default_connection', cuando usa solo un administrador de entidades y múltiples bases de datos. Alguna idea para solucionar esto? – noisebleed

+1

@noisebleed de los documentos: $ php app/console doctrine: schema: update --force --em = customer. lea más aquí: http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html – apfz

Cuestiones relacionadas