Mage :: getModel,但是无法从另一个数据库使用

时间:2018-08-31 11:05:05

标签: database pdo model magento-1.9 external

我设法创建了一个模块,该模块可以连接到商店中的第二个数据库。它启动了一个安装脚本来创建新表,然后我插入了一个测试数据。 到目前为止一切顺利。

现在我想在观察者内部获取数据。 我可以得到模型和集合。但是,当我计算该集合时,它将返回null。当我在该模型上尝试getSelectSql(true)时,查询看起来像:

SELECT `main_table`.* FROM `custom_table` AS `main_table`

在数据库中运行该查询将返回我添加的测试数据。

app / etc / 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 :(得分:0)

在加载集合之前使用setConnection()方法。参数应该是一个有效的核心/资源对象,并选择您的数据库。