Мне удалось создать модуль, который может подключаться ко второй базе данных, следующей за магазином. Он запустил скрипт установки для создания новой таблицы, и я вставил один тест данных.
Пока все хорошо.
Теперь я хочу получить эти данные внутри наблюдателя.
Я могу получить модель и коллекцию. Но когда я считаю эту коллекцию, она возвращает ноль. Когда я пытаюсь использовать getSelectSql (true) для этой модели, запрос выглядит так:
SELECT `main_table`.* FROM `custom_table` AS `main_table`
Выполнение этого запроса в базе данных возвращает мои добавленные тестовые данные.
приложение / и т.д. / local.xml
<config>
<global>
<resources>
<external_db>
<connection>
<host><![CDATA[127.0.0.1]]></host>
<username><![CDATA[db_user]]></username>
<password><![CDATA[db_pass]]></password>
<dbname><![CDATA[external_db]]></dbname>
<active>1</active>
</connection>
Наблюдатель
public function validateRequest(Varien_Event_Observer $observer) {
try {
$collection = Mage::getModel('custom_module/custom_table')->getCollection();
$items = $collection->getItems();
Это возвращает мне следующее исключение:
SQLSTATE [42S02]: Базовая таблица или представление не найдено: 1146 Таблица 'shop.custom_table' не существует, запрос был: SELECT main_table
. * FROM custom_table
AS main_table
Похоже, что magento не может выбрать правильное соединение.
Но я не могу найти способ изменить это по-пурпурному.
Единственный способ, которым это работает:
$resource = Mage::getSingleton('core/resource');
$conn = $resource->getConnection('externaldb_read');
$results = $conn->query('SELECT * FROM custom_table');
Я бы хотел сделать это без создания необработанных запросов.