我设法创建了一个模块,该模块可以连接到商店中的第二个数据库。它启动了一个安装脚本来创建新表,然后我插入了一个测试数据。 到目前为止一切顺利。
现在我想在观察者内部获取数据。 我可以得到模型和集合。但是,当我计算该集合时,它将返回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');
我想这样做而不创建原始查询。
答案 0 :(得分:0)
在加载集合之前使用setConnection()方法。参数应该是一个有效的核心/资源对象,并选择您的数据库。