Respostas:
A primeira coisa que você precisa fazer é criar uma conexão no config.xml do seu módulo. Deve ser semelhante ao do default_setupseu /app/etc/local.xml. Aqui você pode especificar o host como host local e, em seguida, definir um nome de db diferente ou pode especificar um host diferente completamente. Eu também usei um soquete antes do qual também 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>
Agora, depois disso, você poderá conectar-se a este banco de dados e realizar consultas da seguinte maneira:
$new_db_resource = Mage::getSingleton('core/resource');
$connection = $new_db_resource->getConnection('new_db');
$results = $connection->query('SELECT * FROM table');
Se você quiser fazer isso através de um modelo, em seguida, você pode especificar o read, writee setuprecursos como segue. Isso será feito novamente dentro do resourcesnó no seu config.xml e você deverá substituir testpelo que seu modelo foi configurado.
<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>
O próprio modelo tentará encontrar suas informações de conexão na função getConnection /app/code/core/Mage/Core/Model/Resource.php. Se você fizer o login $name, verá valores como poll_write, tag_writee cms_readonde a primeira parte corresponde à seção de modelos no config.xml, no nosso caso, você verá test_write, test_readou test_setup. Se não puder encontrar uma conexão combinar este, em seguida, ele usará as conexões padrão core_read, core_writeoucore_setup
Depois de ler todas essas respostas, pesquisando e fazendo alguns testes, encontrei esta solução. Aqui está o meu blog onde escrevi a solução .
Trabalhando com o Magento 1.9, fui solicitado a fazer várias conexões de leitura e gravação. O Magento tem a possibilidade de configurar conexões de leitura e gravação no /etc/local.xml. Basta definir o uso da tag para que o Magento saiba qual está disponível.
<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 conexões no mesmo arquivo de configuração como este exemplo de teste
<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>
O limite é que as conexões sejam aplicadas a todo o sistema, mas minha ideia é definir apenas para determinados recursos. Nesse caso, eu tenho um módulo de relatório personalizado, no qual só quero fazer conexões de leitura na tabela Pedido. Após substituir o recurso Pedido Mage / Sales / Model / Resource / Order.php Basta fazer 3 atualizações
//bandeira
public $ reportConnection = false;
/ **
* Basta adicionar a conexão definida no local.xml 'test_read'
* /
função protegida _construct () {
$ this -> _ init ('venda / pedido', 'entity_id');
$ this -> _ resources-> getConnection ('test_read');
}
/ **
* Faça a conexão se o sinalizador estiver definido
* /
função protegida _getConnection ($ connectionName) {
if (isset ($ this -> _ connections [$ connectionName])) {
retorne $ this -> _ connections [$ connectionName];
}
if ($ connectionName == 'read' && $ this-> reportConnection)
$ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection ('test_read');
outro{
if (! vazio ($ this -> _ resourcePrefix)) {
$ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection (
$ this -> _ resourcePrefix. '_'. $ connectionName);
} outro {
$ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection ($ connectionName);
}
}
retorne $ this -> _ connections [$ connectionName];
}
O último passo é fazer uma coleção de pedidos chamar, mas usando a conexão test_read.
//Get the Order model
$model = Mage::getModel('sales/order');
//set the flag
$model->getResource()->reportConnection = true;
//get the collection
$collection = $model->getCollection();
No seu módulo etc / config.xml, adicione o seguinte 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 obter dados da tabela usando o novo banco de dados:
<?php
$resource = Mage::getSingleton('core/resource');
$conn = $resource->getConnection('modulename_read');
$results = $conn->fetchAll('SELECT * FROM tablename');
echo "<pre>";
print_r($results);
?>