3

我为我的 Magento 项目创建了一个自定义模块。该模块适用于 Magento 1.6.X 。但是当我在 Magento 版本 1.3.2.4 中安装这个扩展时。Magento 抛出以下错误。

dbModel read resource does not implement Zend_Db_Adapter_Abstract

很多论坛都讨论过这个问题。但不幸的是。我没有得到任何结果。

我清除了缓存,重新索引。我还应该做些什么来解决这个问题。

Var文件夹权限已设置777。即使我尝试了新的 Magento 安装,但同样的错误。

提前致谢。

4

3 回答 3

9

就我而言,只需帮助清除 MAGENTO_ROOT/var/cache/ 目录下的文件/目录即可解决问题。

dbModel 读取资源没有实现 Zend_Db_Adapter_Abstract

于 2013-01-10T14:17:31.113 回答
5

对于该版本的 Magento (1.3.2.4),您需要在 config.xml 文件中指定读写连接。

在 下<global>,添加一个<resources>节点,如下所示:

<resources>
    <yourModelNode_write>
        <connection>
            <use>core_write</use>
        </connection>
    </yourModelNode_write>
    <yourModelNode_read>
        <connection>
            <use>core_write</use>
        </connection>
    </yourModelNode_read>
</resources>

确保刷新缓存!

这种类型的配置在以后的 Magento 版本中是可选的;如果您未在配置中指定它们,系统将加载默认的读/写连接。我不确定这个特性是什么时候实现的,但它存在于 1.6.x 中。

1.3.2.4 和 1.6.x 的区别在于 Mage_Core_Model_Resource::getConnection()。

如果您的 config.xml 中没有指定,1.6.x 将返回默认的读/写连接:

Mage_Core_Model_Resource::getConnection()

$connConfig = Mage::getConfig()->getResourceConnectionConfig($name);

if (!$connConfig) {
    $this->_connections[$name] = $this->_getDefaultConnection($name);
    return $this->_connections[$name];
}

1.3.2.4 将返回 false:

$connConfig = Mage::getConfig()->getResourceConnectionConfig($name);

if (!$connConfig || !$connConfig->is('active', 1)) {
    return false;
}

您收到“未实现 Zend_Db_Adapter_Abstract”错误的原因位于 Varien_Data_Collection_Db::setConnection() 中:

public function setConnection($conn)
{
    if (!$conn instanceof Zend_Db_Adapter_Abstract) {
        throw new Zend_Exception('dbModel read resource does not implement Zend_Db_Adapter_Abstract');
    }

    $this->_conn = $conn;
    $this->_select = $this->_conn->select();
}

false作为连接 ($conn) 传入时,它会抛出这个错误,因为——当然——false不是 Zend_Db_Adapter_Abstract 的实例。

于 2012-05-07T21:10:39.997 回答
2

无论 dbModel 是什么类,它都需要实现 Zend_Db_Adapter_Abstract。这就是所谓的接口。如果您想了解更多接口是什么,我会在这里查看它与 PHP 的关系(http://php.net/manual/en/language.oop5.interfaces.php)

所以基本上无论 dbModel 是什么,你都需要确保它的类定义在类名之后包含“implements Zend_Db_Adapter_Abstract”。

在不知道你试图用你的模块完成什么的情况下,我只能告诉你(基本上解释错误)。我怀疑 dbModel 是 Magento 的核心对象,如果是这种情况,我相信您会陷入两个 Magento 版本之间的不兼容问题。

但是,如果 dbModel 是您的类之一,则将实现添加到您的类定义中应该可以清除错误。

于 2012-05-02T10:54:30.850 回答