¿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_setupde 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, writey setuplos recursos de la siguiente manera. Esto se hará nuevamente dentro del resourcesnodo en su config.xml y debe reemplazarlo testcon 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 $namepasado, verá valores como poll_write, tag_writey cms_readdonde la primera parte coincide con la sección de modelos en config.xml, en nuestro caso vería test_write, test_reado test_setup. Si no puede encontrar una conexión que coincida con esto, utilizará las conexiones predeterminadas core_read, core_writeocore_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
//bandera public $ reportConnection = false; / ** * Simplemente agregue la conexión definida en el local.xml 'test_read' * / función protegida _construct () { $ this -> _ init ('ventas / pedido', 'entidad_id'); $ this -> _ resources-> getConnection ('test_read'); } / ** * Haga la conexión si la bandera está configurada * / función protegida _getConnection ($ connectionName) { if (isset ($ this -> _ connections [$ connectionName])) { devuelve $ this -> _ connections [$ connectionName]; } if ($ connectionName == 'read' && $ this-> reportConnection) $ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection ('test_read'); más{ if (! empty ($ this -> _ resourcePrefix)) { $ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection ( $ this -> _ resourcePrefix. '_'. $ connectionName); } más { $ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection ($ connectionName); } } devuelve $ this -> _ connections [$ connectionName]; }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