2012-07-02 2 views
13

Ich haben ein Symfony2 Projekt mit einem MySQL-db:Lehre 2 - Mehrere Datenbanken Konfiguration und Verwendung

#app/config/config.yml 
doctrine: 
    dbal: 
     driver: %database_driver% # < 
     host:  %database_host%  # | 
     port:  %database_port%  # | Defined in 
     dbname: %database_name%  # | parameters.ini 
     user:  %database_user%  # | 
     password: %database_password% # < 

    orm: 
     auto_generate_proxy_classes: %kernel.debug% 
     auto_mapping: true 

Nun möchte Ich mag einfache Abfragen machen (wie Routine Anrufe) zu einer anderen Datenbank.

Sollte ich ein anderes DBAL in die Konfigurationsdatei definieren?
Wenn ja, wie kann es konfiguriert werden, während die Standardverbindung für das Projekt beibehalten wird?
Muss ich für jede Verbindung ein ORM konfigurieren?

Antwort

22

Sie benötigen eine andere Ebene der Konfiguration hinzuzufügen und auch multiple entity managers verwenden als Lehre verwendet 1 Entity Manager pro Datenbankverbindung .. Ihre Konfiguration wie folgt aussehen könnte:

doctrine: 
    dbal: 
     connections: 
     default: 
      driver: %database_driver% # < 
      host:  %database_host%  # | 
      port:  %database_port%  # | Defined in 
      dbname: %database_name%  # | parameters.ini 
      user:  %database_user%  # | 
      password: %database_password% # < 
     another: 
      driver: %database2_driver% # < 
      host:  %database2_host%  # | 
      port:  %database2_port%  # | Defined in 
      dbname: %database2_name%  # | parameters.ini 
      user:  %database2_user%  # | 
      password: %database2_password% # < 

Dann Sie mehrere Entity-Manager definieren so

doctrine: 
    orm: 
     default_entity_manager: default 
     entity_managers: 
      default: 
       connection:  default 
       mappings: 
        AcmeDemoBundle: ~ 
        AcmeStoreBundle: ~ 
      another: 
       connection:  another 
       mappings: 
        AcmeCustomerBundle: ~ 

dann in Ihrer Aktion können Sie die folgenden Funktionen erhalten die richtige Einheit Manager verwenden:

$em = $this->get('doctrine')->getEntityManager('default'); 
$em = $this->get('doctrine')->getEntityManager('another'); 

je nachdem, welchen Entity Manager Sie benötigen

+0

Genau das, was ich gesucht habe. BTW muss ich einen Entity Manager für jede Verbindung definieren? Ich werde nur Routinen von der anderen Verbindung aufrufen. –

+0

Sie benötigen einen Entity Manager pro Verbindung ja ... wenn Sie ihn nicht verwenden, warum stellen Sie die Verbindung her? – ManseUK

+0

Tatsächlich benutzte ich vor meiner 'anderen' Verbindung' auto_mapping: true' und ich muss keine Entität von der 'anderen' Verbindung verwalten. Ich nehme an, ich muss '$ this-> get ('doctriny.dbal.another_connection')' verwenden und die 'entity_manager 'leer lassen –