Yanıtlar:
Yapmanız gereken ilk şey, modülünüzün config.xml dosyasında bir bağlantı oluşturmaktır. Bu gibi görünmelidir default_setup
Gözlerinde farklı /app/etc/local.xml
. Burada ana makineyi localhost olarak belirtebilir ve sonra farklı bir dbname ayarlayabilir veya tamamen farklı bir ana bilgisayar belirtebilirsiniz. Daha önce de çalışan bir soket kullandım.
<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>
Şimdi bundan sonra bu veritabanına aşağıdaki gibi bir sorgu gerçekleştirmek mümkün olacak:
$new_db_resource = Mage::getSingleton('core/resource');
$connection = $new_db_resource->getConnection('new_db');
$results = $connection->query('SELECT * FROM table');
Bunu bir model aracılığıyla yapmak istiyorsanız read
, write
ve setup
kaynaklarını aşağıdaki gibi belirleyebilirsiniz . Bu, resources
config.xml dosyasındaki düğümün içinde tekrar yapılacaktır ve test
modelinizin ayarlandığı ile değiştirmelisiniz .
<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>
Modelin kendisi fonksiyonda bağlantı bilgilerini bulmaya çalışacaktır getConnection
/app/code/core/Mage/Core/Model/Resource.php
. Eğer giriş yaparsanız $name
aşağıdaki gibi değerleri göreceksiniz geçirilen poll_write
, tag_write
ve cms_read
ilk bölümü config.xml'de modeller bölümünü maçları nerede, bizim durumumuzda göreceğiniz test_write
, test_read
ya test_setup
. Bununla eşleşen bir bağlantı bulamazsa, varsayılan bağlantıları kullanır core_read
,core_write
ya dacore_setup
Tüm bu cevapları okuduktan sonra, arama ve bazı testler yaparak bu çözümü buldum. İşte çözümü yazdığım blogum .
Magento 1.9 ile çalışma Birden çok okuma ve yazma bağlantısı yapmam istendi. Magento, /etc/local.xml dosyasında okuma ve yazma bağlantılarını yapılandırma olanağına sahiptir. Magento'ya hangisinin kullanılabilir olduğunu bildirmek için etiket kullanımını ayarlayın.
<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>
Bu test örneği gibi aynı yapılandırma dosyasında n bağlantı tanımlayabiliriz
<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>
Sınır, bağlantıların tüm sisteme uygulanmasıdır, ancak benim fikrim sadece belirli kaynaklar için ayarlamaktır. Bu durumda, yalnızca Sipariş tablosunda okuma bağlantıları yapmak istediğim özel bir rapor modülüm var. Sipariş kaynağını geçersiz kıldıktan sonra Mage / Sales / Model / Resource / Order.php Sadece 3 güncelleme yapın
// bayrak public $ reportConnection = yanlış; / ** * Sadece local.xml 'test_read' içinde tanımlanan bağlantıyı ekleyin * / korumalı işlev _construct () { $ this -> _ init ('satış / sipariş', 'entity_id'); $ this -> _ kaynaklarıyla> getConnection ( 'test_read'); } / ** * Bayrak ayarlanmışsa bağlantıyı kurun * / korumalı işlev _getConnection ($ connectionName) { if (isset ($ this -> _ connections [$ connectionName]))) { $ this -> _ connections döndürür [$ connectionName]; } if ($ connectionName == 'oku' && $ this-> reportConnection) $ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection ('test_read'); Başka{ if (! empty ($ this -> _ resourcePrefix)) { $ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection ( $ this -> _ resourcePrefix. '_'. $ ConnectionName); } Başka { $ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection ($ connectionName); } } $ this -> _ connections döndürür [$ connectionName]; }
Son adım, bir test koleksiyonu oluşturmak, ancak test_read bağlantısını kullanmaktır.
//Get the Order model
$model = Mage::getModel('sales/order');
//set the flag
$model->getResource()->reportConnection = true;
//get the collection
$collection = $model->getCollection();
Etc / config.xml modülünüze aşağıdaki kodu ekleyin:
<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>
Yeni veritabanı kullanarak tablodan veri almak için:
<?php
$resource = Mage::getSingleton('core/resource');
$conn = $resource->getConnection('modulename_read');
$results = $conn->fetchAll('SELECT * FROM tablename');
echo "<pre>";
print_r($results);
?>