2011-01-11 13 views
8

Necesito conectarme a algunas bases de datos externas de Magento. Encontré un tutorial en Create an external database connection in Magento. Este tutorial fue útil y funcionó para conectarse a una base de datos externa. Pero, tengo que conectar más de una base de datos externa.¿Cómo conectar múltiples bases de datos externas en Magento?

¿Cómo puedo conectarme a más de una base de datos externa (supongamos 5 bases de datos externas) en Magento?

+0

Este tipo de pregunta no pertenece realmente al desbordamiento de la pila, ya que no es una cuestión de programación. Deberías echarle un vistazo a http://area51.stackexchange.com/proposals/25439/magento y ver cómo conseguir un lugar adecuado para poner este tipo de preguntas. – Sturm

Respuesta

2

encontré este módulo Magento que le ayudará a conectarse al sistema de base de datos externa. http://subesh.com.np/2012/02/magento-external-database-connector-v1-0-0-released/

Probé el módulo y parece estar funcionando bien. Espero que esto ayude.

EDIT:

módulo también disponible en Magento Connect. http://www.magentocommerce.com/magento-connect/sp-edb-4574.html

+0

Ese enlace está muerto ahora, ¿tiene un ULR nuevo? ¿Algún comentario de seguimiento sobre cómo funciona esto en los sitios en vivo? –

5

No lo he probado, pero esperaría que duplicar los nodos externaldb_* bajo global\resources con otro nombre de recurso (único), p. externaldb2_* debería funcionar.

<global> 
<resources> 
    <externaldb_write> 
    <connection> 
     <use>externaldb_database</use> 
    </connection> 
    </externaldb_write> 
    <externaldb_read> 
    <connection> 
     <use>externaldb_database</use> 
    </connection> 
    </externaldb_read> 
    <externaldb_setup> 
    <connection> 
     <use>core_setup</use> 
    </connection> 
    </externaldb_setup> 
    <externaldb_database> 
    <connection> 
     <host><![CDATA[localhost]]></host> 
     <username><![CDATA[db_username]]></username> 
     <password><![CDATA[db_password]]></password> 
     <dbname><![CDATA[db_name]]></dbname> 
     <model>mysql4</model> 
     <type>pdo_mysql</type> 
     <active>1</active> 
    </connection> 
    </externaldb_database> 
    <externaldb2_write> 
    <connection> 
     <use>externaldb2_database</use> 
    </connection> 
    </externaldb2_write> 
    <externaldb2_read> 
    <connection> 
     <use>externaldb2_database</use> 
    </connection> 
    </externaldb2_read> 
    <externaldb2_setup> 
    <connection> 
     <use>core_setup</use> 
    </connection> 
    </externaldb2_setup> 
    <externaldb2_database> 
    <connection> 
     <host><![CDATA[localhost2]]></host> 
     <username><![CDATA[db2_username]]></username> 
     <password><![CDATA[db2_password]]></password> 
     <dbname><![CDATA[db2_name]]></dbname> 
     <model>mysql4</model> 
     <type>pdo_mysql</type> 
     <active>1</active> 
    </connection> 
    </externaldb2_database> 
</resources> 

+2

Gracias a Jonathan por la pronta respuesta. Sin embargo, quiero buscar datos en modo Magento (usando/creando modelos de Magento). Después de agregar el nodo externaldb2, ¿cómo puedo usarlo en los modelos de Magento? Como en el enlace de ejemplo, el nodo externaldb se usa para definir el modelo. ¿Cómo puedo definir el modelo para externaldb2 de manera similar? –

+0

@chapagain, haga lo mismo, coloque el modelo en un módulo diferente, en dicho módulo configure la 2da base de datos como su recurso, y puede hacer lo que está tratando de hacer ... solo invoque el modelo desde el 2do módulo a través del 1er – sucitivel

4

puede especificar el recurso utilizado en el archivo etc/config.xml del módulo, de manera que un módulo utilizará siempre una cierta fuente de datos o se puede especificar en el xml de configuración global según lo descrito por la respuesta anterior, entonces esta conexión se usará por defecto.

Puede cambiar el recurso en su código:

$resource = Mage::getSingleton(‘core/resource’); 
$conn  = $resource->getConnection(‘externaldb2_read’); 
0

Por lo que puedo decir, no puede tener modelos que se conectan a varias fuentes de bases de datos desde el mismo módulo.

Lo que he hecho, es crear un módulo ficticio paralelo, que solo contenga el modelo que necesita para conectarse a la base de datos alternativa. Entonces, el módulo que hace todo el trabajo está en una rama, y ​​el módulo ficticio para hablar con la otra base de datos está separado. Resuelve el problema maravillosamente, aunque no es la solución más elegante ... pero tampoco es el menos elegante

Cuestiones relacionadas