Câu trả lời:
Điều đầu tiên bạn cần làm là tạo một kết nối trong tệp config.xml của mô-đun. Nó sẽ trông tương tự như default_setup
trong của bạn /app/etc/local.xml
. Tại đây, bạn có thể chỉ định máy chủ là localhost và sau đó đặt một dbname khác hoặc bạn có thể chỉ định hoàn toàn một máy chủ khác. Tôi cũng đã sử dụng một ổ cắm trước đó cũng hoạt động.
<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>
Bây giờ sau này, bạn sẽ có thể kết nối với cơ sở dữ liệu này một truy vấn thực hiện như sau:
$new_db_resource = Mage::getSingleton('core/resource');
$connection = $new_db_resource->getConnection('new_db');
$results = $connection->query('SELECT * FROM table');
Nếu bạn muốn làm điều này thông qua một mô hình sau đó bạn có thể xác định read
, write
và setup
các nguồn tài nguyên như sau. Điều này một lần nữa sẽ được thực hiện bên trong resources
nút trong tệp config.xml của bạn và bạn nên thay thế test
bằng mô hình của bạn đã được thiết lập là.
<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>
Bản thân mô hình sẽ cố gắng tìm thông tin kết nối của nó trong hàm getConnection
/app/code/core/Mage/Core/Model/Resource.php
. Nếu bạn đăng nhập các $name
thông qua trong bạn sẽ thấy giá trị như poll_write
, tag_write
và cms_read
nơi phần đầu tiên phù hợp với phần mô hình trong config.xml, trong trường hợp của chúng tôi bạn sẽ thấy test_write
, test_read
hoặc test_setup
. Nếu nó không thể tìm thấy một kết nối phù hợp với điều này thì nó sẽ sử dụng các kết nối mặc định core_read
, core_write
hoặccore_setup
Sau khi đọc tất cả các câu trả lời, tìm kiếm và thực hiện một số thử nghiệm tôi tìm thấy giải pháp này. Đây là blog của tôi, nơi tôi đã viết giải pháp .
Làm việc với Magento 1.9 Tôi được yêu cầu tạo nhiều kết nối đọc và viết. Magento có khả năng định cấu hình các kết nối đọc và ghi trong /etc/local.xml. Chỉ cần đặt thẻ sử dụng để cho Magento biết cái nào có sẵ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>
Chúng ta có thể định nghĩa n kết nối trong cùng một tệp cấu hình như ví dụ thử nghiệm này
<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>
Giới hạn là các kết nối được áp dụng cho toàn hệ thống nhưng ý tưởng của tôi là chỉ đặt cho một số tài nguyên nhất định. Trong trường hợp này, tôi có một mô-đun báo cáo tùy chỉnh nơi tôi chỉ muốn thực hiện các kết nối đọc trong bảng Đơn hàng. Sau khi ghi đè Tài nguyên đơn hàng Mage / Bán hàng / Mô hình / Tài nguyên / Đơn hàng.php Chỉ cần thực hiện 3 cập nhật
// cờ công khai $ báo cáo kết nối = sai; / ** * Chỉ cần thêm kết nối được xác định trong tệp 'test_read' cục bộ * / hàm được bảo vệ _construct () { $ this -> _ init ('doanh số / đơn hàng', 'entity_id'); $ this -> _ resource-> getConnection ('test_read'); } / ** * Tạo kết nối nếu cờ được đặt * / chức năng được bảo vệ _getConnection ($ ConnectionName) { if (isset ($ this -> _ links [$ ConnectionName])) { trả về $ this -> _ links [$ ConnectionName]; } if ($ ConnectionName == 'read' && $ this-> reportConnection) $ this -> _ links [$ ConnectionName] = $ this -> _ resource-> getConnection ('test_read'); khác { if (! trống ($ this -> _ resourcePrefix)) { $ this -> _ links [$ ConnectionName] = $ this -> _ resource-> getConnection ( $ này -> _ resourcePrefix. '_'. $ ConnectionName); } khác { $ this -> _ links [$ ConnectionName] = $ this -> _ resource-> getConnection ($ ConnectionName); } } trả về $ this -> _ links [$ ConnectionName]; }
Bước cuối cùng là thực hiện cuộc gọi một bộ sưu tập Đơn hàng nhưng sử dụng kết nối test_read.
//Get the Order model
$model = Mage::getModel('sales/order');
//set the flag
$model->getResource()->reportConnection = true;
//get the collection
$collection = $model->getCollection();
Trong mô-đun của bạn, v.v. / config.xml, thêm đoạn mã sau:
<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>
Để lấy dữ liệu từ bảng bằng cơ sở dữ liệu mới:
<?php
$resource = Mage::getSingleton('core/resource');
$conn = $resource->getConnection('modulename_read');
$results = $conn->fetchAll('SELECT * FROM tablename');
echo "<pre>";
print_r($results);
?>