我可以将数据库适配器设置为在Zend_Db_Table_Abstract类中永久使用吗?

时间:2009-05-06 21:11:30

标签: zend-framework zend-db-table

我的网站使用了2个数据库,包括与其他网站特定数据库相关的中央用户数据库。

有时候拨打new User(array('db'=>'adapter1'));就足够了(但从不方便);但有时候,例如在声明不同数据库中的表之间的关系时,则无法执行此操作。

有没有人知道在Zend_Db_Table_Abstract类中指定使用哪个数据库适配器的方法?

谢谢!

4 个答案:

答案 0 :(得分:4)

回到这个很晚,但这里没有一个答案对我有用。我需要使用'tdb'选择少数几个数据库模型,并在每个类中添加以下代码以自动执行:

protected function _setupDatabaseAdapter()
{
    $this->_db = Zend_Registry::get('tdb');
    parent::_setupDatabaseAdapter();
}

我感谢大家一路上的建议!

答案 1 :(得分:3)

Zend_Db_Table_Abstract提供了一种静态方法来设置默认数据库适配器。这样做如下:

Zend_Db_Table_Abstract::setDefaultAdapter($adapter);

现在,默认情况下,所有Table对象都将使用您的适配器。

注意:在线文档有时候不会显而易见,因此您需要检查的第二个最佳位置是:http://framework.zend.com/apidoc/core/

答案 2 :(得分:1)

您可以将类变量$ _db设置为构造函数中的正确适配器。

global $adapter1; //There are better ways than using a global variable

$this->_db = $adapter1;

假设可以在构造函数中引用适配器对象。这似乎不便携,但我相信它会起作用。

答案 3 :(得分:1)

可以使用init函数,它不在Zend_Db_Adapter_Abstract,中使用,可以在你的类中用来设置需要完成的任何事情。 _setAdapter接受命名注册表项的字符串。

public function init()
{
    $this->_setAdapter('tdb');
}