2012-07-13 13 views

risposta

25

L'utilizzo di diversi gestori oggetti (gestori entità) non consente l'intersecazione dei grafici oggetto. Quel caso è troppo complesso e non è gestito da Doctrine ORM.

Se è necessario un caso di questo tipo, mantenere i grafici degli oggetti scollegati salvando gli identificatori degli oggetti correlati (vecchio stile) anziché un riferimento a essi, quindi ottenere manualmente gli oggetti tramite i servizi. Puoi trovare un buon esempio di come funzionerebbe in un example of connection between Doctrine2 ORM and Doctrine2 MongoDB ODM. In alternativa, è anche possibile utilizzare un listener di eventi @PostLoad che popola i dati nelle entità creando il collegamento attraverso i repository che ho collegato nell'esempio. Lo stesso vale per @PostPersist (che dovrebbe invece estrarre gli identificatori per gli oggetti correlati), ma attenzione che questa tecnica possa diventare davvero disordinata.

Inoltre, se l'RDBMS supporta le operazioni tra database su un singolo host, è sufficiente utilizzare un singolo EntityManager e fare riferimento all'altra tabella con @ORM\Table(name="schemaname.tablename").

+6

* Se l'RDBMS supporta le operazioni tra database su un singolo host, è sufficiente utilizzare un singolo EntityManager e fare riferimento all'altra tabella *. Ottimo consiglio Grazie! – noisebleed

+2

Rilevato che Doctrine rileva solo le modifiche dello schema nelle tabelle 'default_connection', quando si utilizza un solo gestore di entità e più database. Qualche idea per ovviare a questo? – noisebleed

+1

@noisebleed dai documenti: $ php app/console dottrine: schema: aggiornamento --force --em = cliente. leggi qui: http://symfony.com/doc/current/cookbook/doctrine/multiple_entity_managers.html – apfz

Problemi correlati