Zend数据库适配器 - 在bootstrap.php中注册?

时间:2011-08-10 13:46:37

标签: php zend-framework

我正在尝试在我的bootstrap.php文件中注册我的默认数据库适配器,以便我可以在任何地方访问它。到目前为止,这是我的代码:

//bootstrap.php
protected function _initDb()
{
    $dbAdapter = Zend_Db::factory(Zend_Registry::get('configuration')
                                       ->resources->db->adapter, 
                                  Zend_Registry::get('configuration')
                                       ->resources->db->params->toArray());

    Zend_Registry::set('dbAdapter', $dbAdapter);
    Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);
}

然后我试着在我的一个模型中称它为:

//exampleModel.php
$select = $this->_getDbAdapter()
                ->select()
                ->from(array('t' => $this->_getTable()->getName()), 
                       array('name'))....

但是我收到错误:

Call to undefined method Application_Model_Example::_getdbAdapter() in...

很明显,它正在我当前的课程中寻找它并找不到它......

3 个答案:

答案 0 :(得分:1)

您需要在Model_Example

中使用此功能
public function _getSqlAdapter()
{
    return Zend_Registry::get('dbAdapter');
}

或直接致电Zend_Db_Table::getDefaultAdapter()而非$this->_getDbAdapter()

答案 1 :(得分:0)

在提供的代码中,您似乎没有从注册表中调用适配器。您需要使用Zend_Registry::get('dbAdapter');

Application_Model_Example扩展了什么类?

答案 2 :(得分:0)

我的引导程序中有Zend_Db_Table::setDefaultAdapter($dbAdapter);(请注意其Zend_Db_Table,而不是Zend_Db_Table_Abstract。)

然后在我的模型中,我会使用

$select = $this->->select()
    ->from(array('t' => $this->_getTable()->getName()), array('name'))....

假设您的模型扩展了Zend_Db_Table