जवाबों:
पहली चीज जो आपको करने की ज़रूरत है वह आपके मॉड्यूल के config.xml में एक कनेक्शन बनाने के लिए है। यह default_setupअपने में समान दिखना चाहिए /app/etc/local.xml। यहां आप होस्ट को लोकलहोस्ट होने के लिए निर्दिष्ट कर सकते हैं और फिर एक अलग dbname सेट कर सकते हैं या आप किसी अन्य होस्ट को पूरी तरह से निर्दिष्ट कर सकते हैं। मैंने पहले भी एक सॉकेट का उपयोग किया है जो काम भी करता है।
<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>
अब इसके बाद आप इस डेटाबेस से कनेक्ट करने में सक्षम होंगे, जो निम्न प्रकार से प्रश्न करता है:
$new_db_resource = Mage::getSingleton('core/resource');
$connection = $new_db_resource->getConnection('new_db');
$results = $connection->query('SELECT * FROM table');
यदि आप इसे एक मॉडल के माध्यम से करना चाहते हैं तो आप निम्नानुसार read, writeऔर setupसंसाधनों को निर्दिष्ट कर सकते हैं । यह resourcesआपके config.xml में नोड के अंदर फिर से किया जाएगा और आपको testअपने मॉडल को सेटअप के रूप में बदलना चाहिए ।
<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>
मॉडल स्वयं यह फ़ंक्शन में कनेक्शन जानकारी खोजने का प्रयास करेगा getConnection /app/code/core/Mage/Core/Model/Resource.php। यदि आप लॉग इन करते हैं तो आप $nameमानेंगे जैसे मान poll_write, tag_writeऔर cms_readजहाँ पहले भाग config.xml में मॉडल अनुभाग से मेल खाता है, हमारे मामले में आप देखेंगे test_write, test_readया test_setup। यदि उसे यह मिलान करने वाला कनेक्शन नहीं मिल रहा है तो वह डिफ़ॉल्ट कनेक्शन का उपयोग करेगा core_read, core_writeयाcore_setup
इन सभी जवाबों को पढ़ने के बाद, मैंने कुछ परीक्षण खोजे और किए। यहाँ मेरा ब्लॉग है जहाँ मैंने समाधान लिखा है ।
Magento 1.9 के साथ काम करते हुए मुझे कई रीड और राइटिंग कनेक्शन बनाने के लिए कहा गया। Magento के /etc/local.xml में पढ़ने और लिखने के कनेक्शन को कॉन्फ़िगर करने की संभावना है। Magento को यह बताने के लिए टैग उपयोग सेट करें कि कौन सा उपलब्ध है।
<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>
हम इस परीक्षण उदाहरण की तरह एक ही विन्यास फाइल में n कनेक्शन को परिभाषित कर सकते हैं
<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>
सीमा यह है कि कनेक्शन पूरे सिस्टम पर लागू होते हैं लेकिन मेरा विचार केवल कुछ संसाधनों के लिए सेट करना है। इस मामले में मेरे पास एक कस्टम रिपोर्ट मॉड्यूल है जहां मैं केवल ऑर्डर तालिका में रीड कनेक्शन बनाना चाहता हूं। आदेश संसाधन माग / बिक्री / मॉडल / संसाधन / आदेश को ओवरराइड करने के बाद। बस 3 अपडेट करें
//झंडा
सार्वजनिक $ रिपोर्टसंपादित करें = गलत;
/ **
* स्थानीय में परिभाषित कनेक्शन जोड़ें। 'test_read'
* /
संरक्षित फ़ंक्शन _construct () {
$ यह -> _ init ('बिक्री / आदेश', 'एंट्री_आईडी');
इस $ -> _ संसाधनों> getConnection ( 'test_read');
}
/ **
* अगर झंडा लगा हो तो संबंध बनाएं
* /
संरक्षित कार्य _getConnection ($ कनेक्शननाम) {
अगर (isset ($ यह -> _ कनेक्शन [$ कनेक्शननाम])) {
$ यह लौटाएँ -> _ कनेक्शन [$ कनेक्शननाम];
}
अगर ($ कनेक्शननाम == 'पढ़ें' और & quot; $ यह-> रिपोर्ट संपर्क)
$ यह -> _ कनेक्शन [$ कनेक्शननाम] = $ यह -> संसाधन-> getConnection ('test_read');
अन्य{
अगर (खाली है ($ -> _ रिसोर्सप्रिफ़िक्स)) {
$ यह -> _ कनेक्शन [$ कनेक्शननाम] = $ यह -> _ संसाधन-> getConnection (
$ यह -> _ रिसोर्सप्रिफ़िक्स। '_'। $ ConnectionName);
} अन्य {
$ यह -> _ कनेक्शन [$ कनेक्शननाम] = $ यह -> _ संसाधन-> getConnection ($ कनेक्शननाम);
}
}
$ यह लौटाएँ -> _ कनेक्शन [$ कनेक्शननाम];
}
अंतिम चरण कॉल ऑर्डर ऑर्डर करना है लेकिन test_read कनेक्शन का उपयोग करना है।
//Get the Order model
$model = Mage::getModel('sales/order');
//set the flag
$model->getResource()->reportConnection = true;
//get the collection
$collection = $model->getCollection();
अपने मॉड्यूल आदि में / config.xml निम्नलिखित कोड जोड़ें:
<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>
नए डेटाबेस का उपयोग कर तालिका से डेटा प्राप्त करने के लिए:
<?php
$resource = Mage::getSingleton('core/resource');
$conn = $resource->getConnection('modulename_read');
$results = $conn->fetchAll('SELECT * FROM tablename');
echo "<pre>";
print_r($results);
?>