Можно ли подключиться к другой базе данных из Magento и получить доступ к данным?
Если мне нужно создать модуль, как я могу создать модуль для доступа к другой базе данных? Есть ли учебник, который рассказывает об этом с нуля? Любая идея?
Можно ли подключиться к другой базе данных из Magento и получить доступ к данным?
Если мне нужно создать модуль, как я могу создать модуль для доступа к другой базе данных? Есть ли учебник, который рассказывает об этом с нуля? Любая идея?
Первое, что вам нужно сделать, это создать соединение в файле config.xml вашего модуля. Это должно выглядеть примерно так же, как 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
узла в вашем 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 знал, какой из них доступен.
Мы можем определить n соединений в одном и том же конфигурационном файле, как в этом тестовом примере.
Ограничение состоит в том, что соединения применяются ко всей системе, но моя идея - устанавливать только для определенных ресурсов. В этом случае у меня есть пользовательский модуль отчетов, в котором я хочу только устанавливать соединения для чтения в таблице Order. После переопределения ресурса Order Mage / Sales / Model / Resource / Order.php достаточно сделать 3 обновления
Последний шаг - вызвать коллекцию Order, но используя соединение test_read.
источник
В вашем модуле etc / config.xml добавьте следующий код:
Чтобы получить данные из таблицы, используя новую базу данных:
источник