2012-07-02 14 views
13

que tienen un proyecto Symfony2 con una base de datos MySQL:Doctrina 2 - Configuración de múltiples bases de datos y el uso de

#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 

Ahora me gustaría hacer consultas simples (como las llamadas de rutina) a otro base de datos.

¿Debo definir otro dbal en el archivo de configuración?
En caso afirmativo, ¿cómo se puede configurar manteniendo la conexión predeterminada para el proyecto?
¿Debo configurar un orm para cada conexión?

Respuesta

22

es necesario agregar otro nivel de configuración y también utilizar como multiple entity managers Doctrina utiliza gestor de 1 por cada entidad de conexión de base .. la configuración podría ser algo como esto:

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% # < 

A continuación, defina sus múltiples gestores de entidad como por lo

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

entonces en su acción que se puede utilizar el siguiente para obtener el gestor de la entidad correcta:

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

dependiendo del administrador de entidades que requiera

+0

Exactamente lo que estaba buscando. Por cierto, ¿debo definir un administrador de entidades para cada conexión? Solo llamaré rutinas de la otra conexión. –

+0

Necesita un administrador de entidades por conexión, sí ... si no va a usarlo, ¿por qué está configurando la conexión? – ManseUK

+0

De hecho, antes de mi conexión 'another', estaba usando' auto_mapping: true' y no necesito administrar ninguna entidad de la conexión 'another'. Supongo que tendré que usar '$ this-> get ('doctrine.dbal.another_connection')' y mantener el 'entity_managers' vacío –

Cuestiones relacionadas