2013-03-27 3 views
7

Il mio obiettivo è di ottenere l'accesso a più database in One Project Bundle.Symfony2: Come generare entità da più database esistenti nel pacchetto SAME?

Ho letto attraverso la documentazione di Symfony2 e sono riusciti a fare i seguenti:

  1. configure multiple connections for different Bundles
  2. generate Entities from ONE Existing Database utilizzando:

    php app/console doctrine:mapping:import AcmeBlogBundle annotation 
    php app/console doctrine:generate:entities AcmeBlogBundle 
    

ma non riesco a trovare il modo a genera entità da più database esistenti nel pacchetto SAME in modo che sia possibile accedere a più database in un unico pacchetto. Qualche idea?

P.S. Non ho familiarità con Doctrine. Quindi in realtà se ci sono modi per fare Symfony2 senza Doctrine, apprezzerei anche.

UPDATE # 1:

Cerad's answer viene abbastanza vicino. Tuttavia, un problema non è ancora risolto. Dato che ho lo stesso nome di tabella in diversi database, è meglio organizzarli in cartelle separate all'interno della cartella Entità. Ho controllato post simili come this e that. Ma le soluzioni non funzionano per me. La loro soluzione mette semplicemente tutte le entità direttamente nella cartella Entity, ignorando l'opzione dir specificata in config.yml. Esistono soluzioni alternative per questo problema?

risposta

4

Il primo passo per configurare più gestori di entità (non le connessioni), uno per ciascun database. Quindi si utilizza l'opzione --em sui comandi doctrine per specificare quale gestore entità utilizzare.

php app/console doctrine:mapping:import "AcmeBlogBundle" annotation --em=name1 
php app/console doctrine:mapping:import "AcmeBlogBundle" annotation --em=name2 

essere consapevoli del fatto che non sarà in grado di interrogare direttamente (join) attraverso più database con la dottrina. Almeno non molto facilmente. Finché penserai di limitare le tue query a un database alla volta, starai bene.

Questo è in realtà un argomento un po 'avanzato. Potresti voler passare un po 'di tempo con la documentazione della dottrina. Potrebbe anche essere più facile iniziare con un database e poi dividerlo in un secondo momento.

+0

grazie per la risposta. Ancora un problema non ancora risolto. Dato che ho lo stesso nome di tabella in diversi database. Quindi è meglio organizzarli in cartelle separate all'interno della cartella Entità. Ho controllato http://stackoverflow.com/questions/13765785/doctrine-generate-entities-namespace-issue ma sembra che non possa essere fatto bene? Esistono soluzioni alternative per questo problema – Capitaine

+0

L'unica soluzione diretta consiste nell'aggiungere il nome del database al nome della tabella. Ma farlo significa che i vari comandi di doctrine smetteranno di funzionare e significa nomi di database di codifica rigidi. A seconda delle esigenze, è possibile che sia possibile utilizzare le viste sql per modificare sostanzialmente i nomi delle tabelle. Penso che starai meglio usando solo bundle multipli. – Cerad

+1

Dovresti creare una nuova installazione di symfony, generare un pacchetto abbattere le tabelle e quindi modificare gli spazi dei nomi e copiare i file nel pacchetto esistente. È un dolore, ma è più facile che tentare di incappare nel generatore di mappe. Puoi sicuramente avere spazi dei nomi sotto l'entità (ho diversi livelli nei miei progetti). 'Bundle/Entity/ThingsThatMakeMeMad/SpilledMilk.php' ecc. –