Magento के दूसरे डेटाबेस को कैसे कनेक्ट करें


17

क्या Magento के किसी अन्य डेटाबेस से कनेक्ट करना और डेटा एक्सेस करना संभव है?

यदि मुझे एक मॉड्यूल बनाने की आवश्यकता है, तो मैं दूसरे डेटाबेस तक पहुंचने के लिए एक मॉड्यूल कैसे बना सकता हूं? क्या कोई ट्यूटोरियल है जो खरोंच से उसी के बारे में बताता है? कोई उपाय?

जवाबों:


18

पहली चीज जो आपको करने की ज़रूरत है वह आपके मॉड्यूल के 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


क्षमा करें, यह मेरे लिए काम नहीं करता है।
बाबा

मुझे समझ नहीं आ रहा है कि इस कोड को कहां लिखा जाए, कहां क्वेरी की जाए और इसमें क्या-क्या किया जाए। उदाहरण के लिए wether i type> host> <! [CDATA [localhost]]> </ host> या <host> localhost </ होस्ट> आदि
बाब

@bab क्या आप एक एकल क्वेरी या एक मॉडल बनाना चाहते हैं जो किसी अन्य डेटाबेस के साथ काम करता है?
डेविड मैनर्स

मैं एक ही क्वेरी बना रहा हूं, लेकिन यदि संभव हो तो मॉडल के माध्यम से भी। आमतौर पर मैं एक सर्वेक्षण साइट पर काम कर रहा हूं। मैं Magento के माध्यम से इस साइट के डेटाबेस को एक्सेस करना चाहता हूं। मैंने इसके लिए बहुत सारे लेख पढ़े हैं, लेकिन मुझे पता नहीं है कि इस कोड को कहां रखा जाए। यदि संभव हो तो कृपया मुझे बताएं कि वांछित परिणाम प्राप्त करने के लिए मैं आपके कोडिंग में क्या बदलाव कर सकता हूं। धन्यवाद।
बाब

@bab दूसरा config.xml उदाहरण को मॉडल के लिए काम करना चाहिए। क्या आपको कोड के साथ कोई त्रुटि मिली?
डेविड मैनर्स 12

3

इन सभी जवाबों को पढ़ने के बाद, मैंने कुछ परीक्षण खोजे और किए। यहाँ मेरा ब्लॉग है जहाँ मैंने समाधान लिखा है ।

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 अपडेट करें

  1. यह जानने के लिए कि क्या $ कनेक्शन को बदलने का समय है, फ्लैग बनाओ।
  2. कस्टम कनेक्शन बनाने और संसाधनों की सरणी में इसे जोड़ने के लिए फ़ंक्शन (अपडेट) _construct () अपडेट करें।
  3. कस्टम फ़ंक्शन का उपयोग करने का निर्णय लेने के लिए फ़ंक्शन _getConnection () अपडेट करें।
//झंडा
सार्वजनिक $ रिपोर्टसंपादित करें = गलत;

/ **
* स्थानीय में परिभाषित कनेक्शन जोड़ें। '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();

1

अपने मॉड्यूल आदि में / 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);
?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.