답변:
가장 먼저해야 할 일은 모듈의 config.xml에 연결을 만드는 것입니다. 의와 비슷해야 default_setup
합니다 /app/etc/local.xml
. 여기서 호스트를 localhost로 지정한 다음 다른 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>
모델 자체는 function에서 연결 정보를 찾으려고 시도합니다 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>
제한은 연결이 전체 시스템에 적용되지만 내 생각은 특정 리소스에 대해서만 설정하는 것입니다. 이 경우 주문 테이블에서 읽기 연결 만 만들고 싶은 사용자 지정 보고서 모듈이 있습니다. Order resource Mage / Sales / Model / Resource / Order.php를 재정의 한 후 3 번 업데이트하십시오.
//깃발 공개 $ reportConnection = 거짓; / ** * local.xml 'test_read'에 정의 된 연결 만 추가하십시오. * / 보호 된 함수 _construct () { $ this-> _ init ( '판매 / 주문', 'entity_id'); $ this-> _ resources-> getConnection ( 'test_read'); } / ** * 플래그가 설정된 경우 연결합니다 * / 보호 된 기능 _getConnection ($ connectionName) { if (isset ($ this-> _ connections [$ connectionName])) { return $ this-> _ connections [$ connectionName]; } if ($ connectionName == '읽기'&& $ this-> reportConnection) $ this-> _ connections [$ connectionName] = $ this-> _ resources-> getConnection ( 'test_read'); 그밖에{ if (! empty ($ this-> _ resourcePrefix)) { $ this-> _ connections [$ connectionName] = $ this-> _ resources-> getConnection ( $ this-> _ resourcePrefix '_'. $ connectionName); } else { $ this-> _ connections [$ connectionName] = $ this-> _ resources-> getConnection ($ connectionName); } } return $ this-> _ connections [$ connectionName]; }
마지막 단계는 주문 콜렉션을 호출하지만 test_read 연결을 사용하는 것입니다.
//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에서 다음 코드를 추가하십시오.
<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);
?>