如何为Zend_Db_Table使用多个sqlite db的模式

时间:2011-06-05 17:08:46

标签: zend-framework sqlite schema zend-db-table

所以我有多个sqlite数据库。 /path/database1.db /path/database2.db

当我为它制作Zend_Db_Table时,如何指定使用哪个数据库?

class Application_Model_DbTable_User extends Zend_Db_Table_Abstract
{
    protected $_schema = 'database1.db';
    protected $_name = 'user';
}

这似乎不起作用。

我目前的解决方案, 我使用multidb并扩展Zend_Db_Table_Abstract并使用_setup over_ide

...... Bootstrap - then use the multidb key for _database
$multiDb = $this->getPluginResource('multidb');
$multiDb->init();
Zend_Registry::set('db', $multiDb);
...... My/Table.php
class My_Table extends Zend_Db_Table_Abstract
{
    public function _setup()
    {
        if($this->_database) {
            $this->_setAdapter(Zend_Registry::get('db')->getDb($this->_database));
        }
    }
}
....... DbTables/Table1.php
class Application_Model_DbTable_Table1 extends My_Table
{
    protected $_database = 'database1';
    protected $_name = 'table1';
}

但我只是想知道可能已经有办法了。 感谢

1 个答案:

答案 0 :(得分:1)

我能想到的最简单的事情是覆盖Zend_Db_Table_Abstract::_setupDatabaseAdapter(),例如

protected function _setupDatabaseAdapter()
{
    if (!$this->_db) {
        $multiDb = Zend_Registry::get('multidb');
        $this->_setAdapter($multiDb->getDb('database1'));
    }
}

您不需要向Bootstrap添加任何内容,因为应用程序资源会自动在Zend_Registry中注册。

我甚至会进一步将其放入自定义抽象类中,例如

abstract class Application_Model_DbTable_Abstract extends Zend_Db_Table_Abstract
{
    protected function _setupDatabaseAdapter()
    {
        // as above
    }
}

然后让你的具体DbTable类扩展它。