¿Es posible conectarse a otra base de datos desde Magento y acceder a los datos?
Si necesito crear un módulo, ¿cómo puedo crear un módulo para acceder a otra base de datos? ¿Hay algún tutorial que cuente lo mismo desde cero? ¿Alguna idea?
¿Es posible conectarse a otra base de datos desde Magento y acceder a los datos?
Si necesito crear un módulo, ¿cómo puedo crear un módulo para acceder a otra base de datos? ¿Hay algún tutorial que cuente lo mismo desde cero? ¿Alguna idea?
Lo primero que debe hacer es crear una conexión en config.xml de su módulo. Debería ser similar al default_setup
de tu /app/etc/local.xml
. Aquí puede especificar que el host sea localhost y luego establecer un dbname diferente o puede especificar un host diferente por completo. También he usado un socket antes que también funciona.
<resources>
<new_db>
<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>
</new_db>
</resources>
Ahora, después de esto, podrá conectarse a esta base de datos y realizar consultas de la siguiente manera:
$new_db_resource = Mage::getSingleton('core/resource');
$connection = $new_db_resource->getConnection('new_db');
$results = $connection->query('SELECT * FROM table');
Si desea hacerlo a través de un modelo a continuación, se puede especificar el read
, write
y setup
los recursos de la siguiente manera. Esto se hará nuevamente dentro del resources
nodo en su config.xml y debe reemplazarlo test
con la configuración de su modelo.
<resources>
<new_db>
<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>
</new_db>
<test_write>
<connection>
<use>new_db</use>
</connection>
</test_write>
<test_read>
<connection>
<use>new_db</use>
</connection>
</test_read>
<test_setup>
<connection>
<use>new_db</use>
</connection>
</test_setup>
</resources>
<models>
<test>
<class>My_Test_Model</class>
<resourceModel>test_resource</resourceModel>
</test>
<test_resource>
<class>My_Test_Model_Resource</class>
<entities>
<test>
<table>test</table>
</test>
</entities>
</test_resource>
</models>
El modelo mismo intentará encontrar su información de conexión en la función getConnection
/app/code/core/Mage/Core/Model/Resource.php
. Si registra el $name
pasado, verá valores como poll_write
, tag_write
y cms_read
donde la primera parte coincide con la sección de modelos en config.xml, en nuestro caso vería test_write
, test_read
o test_setup
. Si no puede encontrar una conexión que coincida con esto, utilizará las conexiones predeterminadas core_read
, core_write
ocore_setup
Después de leer todas estas respuestas, buscar y hacer algunas pruebas, encontré esta solución. Aquí está mi blog donde escribí la solución .
Trabajando con Magento 1.9 se me pidió que hiciera múltiples conexiones de lectura y escritura. Magento tiene la posibilidad de configurar conexiones de lectura y escritura en /etc/local.xml. Simplemente configure el uso de la etiqueta para que Magento sepa cuál está disponible.
Podemos definir n conexiones en el mismo archivo de configuración como este ejemplo de prueba
El límite es que las conexiones se aplican a todo el sistema, pero mi idea es establecer solo ciertos recursos. En este caso, tengo un módulo de informe personalizado donde solo quiero hacer conexiones de lectura en la tabla de pedidos. Después de anular el recurso de pedido Mage / Sales / Model / Resource / Order.php Simplemente haga 3 actualizaciones
El último paso es hacer que se llame una colección de pedidos pero utilizando la conexión test_read.
fuente
En su módulo etc / config.xml agregue el siguiente código:
Para obtener datos de la tabla usando una nueva base de datos:
fuente