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_setup
seu /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
, write
e setup
recursos como segue. Isso será feito novamente dentro do resources
nó no seu config.xml e você deverá substituir test
pelo 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_write
e cms_read
onde a primeira parte corresponde à seção de modelos no config.xml, no nosso caso, você verá test_write
, test_read
ou test_setup
. Se não puder encontrar uma conexão combinar este, em seguida, ele usará as conexões padrão core_read
, core_write
oucore_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);
?>