ম্যাজেন্টো থেকে অন্য ডাটাবেসকে কীভাবে সংযুক্ত করবেন


17

ম্যাজেন্টো এবং ডেটা অ্যাক্সেস করা থেকে অন্য ডাটাবেসের সাথে সংযোগ করা সম্ভব?

যদি আমার কোনও মডিউল তৈরি করতে হয়, তবে অন্য ডেটাবেস অ্যাক্সেস করার জন্য আমি কীভাবে একটি মডিউল তৈরি করতে পারি? এমন কোনও টিউটোরিয়াল আছে যা স্ক্র্যাচ থেকে একই সম্পর্কে বলে? কোন ধারণা?

উত্তর:


18

আপনাকে প্রথমে যা করতে হবে তা হ'ল আপনার মডিউলের কনফিগার.এক্সএমএলে একটি সংযোগ তৈরি করা। এটি default_setupআপনার এর মতো দেখতে হবে /app/etc/local.xml। এখানে আপনি হোস্টকে লোকালহোস্ট হিসাবে নির্দিষ্ট করতে পারেন এবং তারপরে একটি আলাদা ডিবি নাম সেট করতে পারেন বা আপনি সম্পূর্ণ আলাদা হোস্ট নির্দিষ্ট করতে পারেন। আমি এর আগেও একটি সকেট ব্যবহার করেছি যা কাজ করে।

<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আপনার কনফিগার.এক্সএমএল নোডের মধ্যে করা হবে এবং 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


দুঃখিত, এটি আমার পক্ষে কাজ করে না।
বাব

এই কোডটি কোথায় লিখতে হবে, কোয়েরিটি করতে হবে এবং এতে কী চাপ দিতে হবে তা আমি বুঝতে পারি না example উদাহরণস্বরূপ আমি <host><! পিডিএলডিএডিটি ডিএলডিওলোক্যালহোস্ট লিখি </ host> বা <হোস্ট> লোকালহোস্ট </ হোস্ট> ইত্যাদি
বাব

@ বাব আপনি কি একটি একক ক্যোয়ারী বা একটি মডেল তৈরি করতে চান যা অন্য ডাটাবেসের সাথে কাজ করে?
ডেভিড ম্যানার্স

আমি একটি একক জিজ্ঞাসা করছি তবে যদি সম্ভব হয় তবে মডেলের মাধ্যমেও Aআসলে আমি একটি সমীক্ষার সাইটে কাজ করছি। আমি ম্যাজেন্টোর মাধ্যমে এই সাইটের ডেটাবেসটি অ্যাক্সেস করতে চাই same আমি এর জন্য অনেকগুলি নিবন্ধ পড়েছি তবে এই কোডটি কোথায় রাখবেন সে সম্পর্কে আমার কোনও ধারণা নেই possible সম্ভব হলে দয়া করে আমাকে বলুন যে আমি আপনার কোডিংয়ে কী পরিবর্তন করতে পারি কাঙ্ক্ষিত ফলাফল পেতে। ধন্যবাদ।
Bab

@bab দ্বিতীয় কনফিগারেশন.এমএমএল উদাহরণটি মডেলের জন্য কাজ করা উচিত। আপনি কোডটি দিয়ে কোনও ত্রুটি পেয়েছেন?
ডেভিড ম্যানার্স

3

এই সমস্ত উত্তর পড়ার পরে, অনুসন্ধান এবং কিছু পরীক্ষা করার পরে আমি এই সমাধানটি পেয়েছি। এখানে আমার ব্লগটি আমি সমাধানটি লিখেছি ।

ম্যাজেন্টো 1.9 এর সাথে কাজ করা আমাকে একাধিক পঠন এবং লিখন সংযোগ তৈরি করতে বলা হয়েছিল। ম্যাজেন্টো /etc/local.xML এ সংযোগগুলি পড়ার এবং লেখার কনফিগার করার সম্ভাবনা রয়েছে। কোনটি উপলভ্য তা ম্যাগেন্টোকে জানাতে কেবল ট্যাগ ব্যবহারটি সেট করুন।

<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>

আমরা এই পরীক্ষার উদাহরণের মতো একই কনফিগারেশনে এন সংযোগগুলি সংজ্ঞায়িত করতে পারি

<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>

সীমাটি হ'ল সংযোগগুলি পুরো সিস্টেমে প্রয়োগ করা হয় তবে আমার ধারণাটি কেবলমাত্র নির্দিষ্ট সংস্থানগুলির জন্য সেট করা। এই ক্ষেত্রে আমার কাছে একটি কাস্টম রিপোর্ট মডিউল রয়েছে যেখানে আমি কেবল অর্ডার সারণীতে পঠিত সংযোগগুলি তৈরি করতে চাই। অর্ডার রিসোর্স Mage / বিক্রয় / মডেল / রিসোর্স / অর্ডার.এফপি ওভাররাইড করার পরে মাত্র 3 টি আপডেট করুন

  1. সংযোগটি পরিবর্তন করার সময় কিনা তা জানতে একটি পতাকা তৈরি করুন $ রিপোর্টসংযোগ।
  2. কাস্টম সংযোগ তৈরি করতে এবং এটিকে সংস্থানগুলির অ্যারেতে যুক্ত করতে _ কনস্ট্রাক্ট () ফাংশন আপডেট করুন।
  3. কাস্টম সংযোগটি ব্যবহার করুন কিনা তা সিদ্ধান্ত নিতে _getConnication () ফাংশন আপডেট করুন।
// পতাকা
সর্বজনীন $ রিপোর্টকনেকশন = মিথ্যা;

/ **
* স্থানীয়.এক্সএমএল 'টেস্ট_ড্রেড' এ সংজ্ঞায়িত সংযোগটি কেবল যুক্ত করুন
* /
সুরক্ষিত ফাংশন _ কনস্ট্রাক্ট () {
    $ এটি -> _ init ('বিক্রয় / আদেশ', 'সত্তা_আইডি');
    এই $ ->: _ resources-> getConnection ( 'test_read');
}

/ **
* পতাকাটি সেট করা থাকলে সংযোগ করুন
* /
সুরক্ষিত ফাংশন _getConnication ($ সংযোগনাম) {
 যদি (isset ($ এটি -> _ সংযোগগুলি [$ সংযোগ নাম])) {
   ফেরত দিন - এটি -> _ সংযোগগুলি [$ সংযোগ নাম];
    }

   যদি ($ সংযোগনাম == 'পড়ুন' && $ এটি-> রিপোর্ট সংযোগ)
        $ এটি -> _ সংযোগগুলি [$ সংযোগনাম] = $ এটি -> _ উত্স-> getConnection ('টেস্ট_ড্রেড');
   অন্য {
   যদি (! খালি ($ এটি -> _ রিসোর্স প্রিফিক্স)) {
      $ এটি -> _ সংযোগগুলি [$ সংযোগনাম] = $ এটি -> _ সংস্থান-> গেট সংযোগ (
      $ এটি -> _ উত্সপ্রিফিক্স ix '_' $ ConnectionName);
  } অন্য {
   $ এটি -> _ সংযোগগুলি [$ সংযোগনাম] = $ এটি -> _ উত্স-> getConnication ($ সংযোগনাম);
  }
   }
   ফেরত দিন - এটি -> _ সংযোগগুলি [$ সংযোগ নাম];
}

শেষ পদক্ষেপটি কল অর্ডার সংগ্রহ করা কিন্তু টেস্ট_ড সংযোগটি ব্যবহার করা।

//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);
?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.