Respuestas:
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.
<default_setup>
<connection>
<!-- LOCALHOST -->
<host>localhost</host>
<username>root</username>
<password>123456</password>
<dbname>magento_db</dbname>
<initstatements>SET NAMES utf8</initstatements>
<model>mysql4</model>
<type>pdo_mysql</type>
<pdotype></pdotype>
<active>1</active>
</connection>
</default_setup>
<default_read>
<connection>
<use/>
<!-- ANOTHER SERVER -->
<host>other_server</host>
<username>root</username>
<password>123456</password>
<dbname>magento_db</dbname>
<initstatements>SET NAMES utf8</initstatements>
<model>mysql4</model>
<type>pdo_mysql</type>
<pdotype></pdotype>
<active>1</active>
</use></connection>
</default_read>
<default_write>
<connection>
<use/>
<!-- LOCALHOST -->
<host>localhost</host>
<username>root</username>
<password>123456</password>
<dbname>magento_db</dbname>
<initstatements>SET NAMES utf8</initstatements>
<model>mysql4</model>
<type>pdo_mysql</type>
<pdotype></pdotype>
<active>1</active>
</use></connection>
</default_write>
Podemos definir n conexiones en el mismo archivo de configuración como este ejemplo de prueba
<test_read>
<connection>
<!-- TEST SERVER -->
<host>test_server</host>
<username>root</username>
<password>123456</password>
<dbname>magento_db</dbname>
<initstatements>SET NAMES utf8</initstatements>
<model>mysql4</model>
<type>pdo_mysql</type>
<pdotype></pdotype>
<active>1</active>
</connection>
</test_read>
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.
//Get the Order model
$model = Mage::getModel('sales/order');
//set the flag
$model->getResource()->reportConnection = true;
//get the collection
$collection = $model->getCollection();
En su módulo etc / config.xml agregue el siguiente código:
<global>
<resources>
<modulename_write>
<connection>
<use>modulename_database</use>
</connection>
</modulename_write>
<modulename_read>
<connection>
<use>modulename_database</use>
</connection>
</modulename_read>
<modulename_setup>
<connection>
<use>core_setup</use>
</connection>
</modulename_setup>
<modulename_database>
<connection>
<host><![CDATA[localhost]]></host>
<username><![CDATA[db_username]]></username>
<password><![CDATA[db_password]]></password>
<dbname><![CDATA[tablename]]></dbname>
<model>mysql4</model>
<type>pdo_mysql</type>
<active>1</active>
</connection>
</modulename_database>
</resources>
</global>
Para obtener datos de la tabla usando una nueva base de datos:
<?php
$resource = Mage::getSingleton('core/resource');
$conn = $resource->getConnection('modulename_read');
$results = $conn->fetchAll('SELECT * FROM tablename');
echo "<pre>";
print_r($results);
?>