Jawaban:
Hal pertama yang perlu Anda lakukan adalah membuat koneksi di config.xml modul Anda. Seharusnya terlihat mirip dengan default_setup
di Anda /app/etc/local.xml
. Di sini Anda dapat menentukan host menjadi localhost dan kemudian mengatur dbname yang berbeda atau Anda dapat menentukan host yang berbeda sepenuhnya. Saya juga menggunakan soket yang sebelumnya juga berfungsi.
<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>
Sekarang setelah ini, Anda akan dapat terhubung ke database ini dan melakukan kueri sebagai berikut:
$new_db_resource = Mage::getSingleton('core/resource');
$connection = $new_db_resource->getConnection('new_db');
$results = $connection->query('SELECT * FROM table');
Jika Anda ingin melakukan ini melalui model maka Anda dapat menentukan read
, write
dan setup
sumber daya sebagai berikut. Ini lagi akan dilakukan di dalam resources
node di config.xml Anda dan Anda harus mengganti test
dengan model yang telah Anda setup.
<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>
Model itu sendiri akan mencoba menemukan informasi koneksi dalam fungsinya getConnection
/app/code/core/Mage/Core/Model/Resource.php
. Jika Anda login yang $name
dilewati Anda akan melihat nilai-nilai seperti poll_write
, tag_write
dan di cms_read
mana bagian pertama cocok dengan bagian model di config.xml, dalam kasus kami Anda akan melihat test_write
, test_read
atau test_setup
. Jika tidak dapat menemukan koneksi yang cocok dengan ini maka itu akan menggunakan koneksi default core_read
, core_write
ataucore_setup
Setelah membaca semua jawaban ini, mencari dan membuat beberapa tes saya menemukan solusi ini. Ini blog saya tempat saya menulis solusinya .
Bekerja dengan Magento 1.9 Saya diminta untuk membuat beberapa koneksi baca dan tulis. Magento memiliki kemungkinan untuk mengonfigurasi koneksi baca dan tulis di /etc/local.xml. Cukup atur penggunaan tag untuk memberi tahu Magento mana yang tersedia.
<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>
Kita dapat mendefinisikan n koneksi dalam file konfigurasi yang sama seperti contoh pengujian ini
<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>
Batasnya adalah bahwa koneksi diterapkan ke seluruh sistem tetapi ide saya adalah hanya mengatur sumber daya tertentu. Dalam hal ini saya memiliki modul laporan khusus di mana saya hanya ingin membuat koneksi baca di tabel pesanan. Setelah mengganti Mage sumber daya Order / Penjualan / Model / Sumber Daya / Order.php Cukup buat 3 pembaruan
//bendera public $ reportConnection = false; / ** * Cukup tambahkan koneksi yang ditentukan dalam local.xml 'test_read' * / fungsi terproteksi _construct () { $ this -> _ init ('penjualan / pesanan', 'entity_id'); $ this -> _ resources-> getConnection ('test_read'); } / ** * Buat koneksi jika bendera diatur * / fungsi terproteksi _getConnection ($ connectionName) { if (isset ($ this -> _ koneksi [$ connectionName])) { return $ this -> _ koneksi [$ connectionName]; } if ($ connectionName == 'read' && $ this-> reportConnection) $ this -> _ koneksi [$ connectionName] = $ this -> _ resources-> getConnection ('test_read'); lain{ if (! empty ($ this -> _ resourcePrefix)) { $ this -> _ koneksi [$ connectionName] = $ this -> _ resources-> getConnection ( $ this -> _ resourcePrefix. '_'. $ connectionName); } lain { $ this -> _ koneksi [$ connectionName] = $ this -> _ resources-> getConnection ($ connectionName); } } return $ this -> _ koneksi [$ connectionName]; }
Langkah terakhir adalah membuat panggilan koleksi pesanan tetapi menggunakan koneksi test_read.
//Get the Order model
$model = Mage::getModel('sales/order');
//set the flag
$model->getResource()->reportConnection = true;
//get the collection
$collection = $model->getCollection();
Dalam modul Anda, etc / config.xml tambahkan kode berikut:
<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>
Untuk mendapatkan data dari tabel menggunakan database baru:
<?php
$resource = Mage::getSingleton('core/resource');
$conn = $resource->getConnection('modulename_read');
$results = $conn->fetchAll('SELECT * FROM tablename');
echo "<pre>";
print_r($results);
?>