Mage :: getModel, но из другой базы данных не работают - PullRequest
0 голосов
/ 31 августа 2018

Мне удалось создать модуль, который может подключаться ко второй базе данных, следующей за магазином. Он запустил скрипт установки для создания новой таблицы, и я вставил один тест данных. Пока все хорошо.

Теперь я хочу получить эти данные внутри наблюдателя. Я могу получить модель и коллекцию. Но когда я считаю эту коллекцию, она возвращает ноль. Когда я пытаюсь использовать 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');

Я бы хотел сделать это без создания необработанных запросов.

1 Ответ

0 голосов
/ 31 августа 2018

используйте метод setConnection () перед загрузкой вашей коллекции. Аргумент должен быть допустимым объектом ядра / ресурса с выбранной базой данных.

...