Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Zend framework 如何为Zend_db_表的多个sqlite db使用模式_Zend Framework_Sqlite_Schema_Zend Db Table - Fatal编程技术网

Zend framework 如何为Zend_db_表的多个sqlite db使用模式

Zend framework 如何为Zend_db_表的多个sqlite db使用模式,zend-framework,sqlite,schema,zend-db-table,Zend Framework,Sqlite,Schema,Zend Db Table,所以我有多个sqlite数据库。 /路径/数据库1.db /路径/数据库2.db 当我为它创建Zend_Db_表时,如何指定要使用哪个Db class Application_Model_DbTable_User extends Zend_Db_Table_Abstract { protected $_schema = 'database1.db'; protected $_name = 'user'; } 这似乎不起作用 我目前的解决方案, 我使用multidb和extend

所以我有多个sqlite数据库。 /路径/数据库1.db /路径/数据库2.db

当我为它创建Zend_Db_表时,如何指定要使用哪个Db

class Application_Model_DbTable_User extends Zend_Db_Table_Abstract
{
    protected $_schema = 'database1.db';
    protected $_name = 'user';
}
这似乎不起作用

我目前的解决方案, 我使用multidb和extend Zend_Db_Table_Abstract,并有一个类似于

...... 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';
}
但我只是想知道也许已经有办法了。
谢谢

我能想到的最简单的事情就是覆盖
Zend\u Db\u Table\u摘要::\u setupDatabaseAdapter()
,例如

protected function _setupDatabaseAdapter()
{
    if (!$this->_db) {
        $multiDb = Zend_Registry::get('multidb');
        $this->_setAdapter($multiDb->getDb('database1'));
    }
}
您不需要向引导添加任何内容,因为应用程序资源会自动注册到
Zend_注册表中

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

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

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

我能想到的最简单的事情是重写
Zend\u Db\u Table\u Abstract::\u setupDatabaseAdapter()
,例如

protected function _setupDatabaseAdapter()
{
    if (!$this->_db) {
        $multiDb = Zend_Registry::get('multidb');
        $this->_setAdapter($multiDb->getDb('database1'));
    }
}
您不需要向引导添加任何内容,因为应用程序资源会自动注册到
Zend_注册表中

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

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

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

它看起来不像Zend_注册表自动添加我的资源。有什么特别的需要打开的吗?这和我已经有的一样。我想可能还没有直接的方法。THanks@Lasiaf我的错误。虽然
Zend_应用程序\u引导\u引导\u引导\u引导
在内部使用
Zend_注册表
,但它不是全局可用的实例。它看起来不像Zend_注册表自动添加我的资源。有什么特别的需要打开的吗?这和我已经有的一样。我想可能还没有直接的方法。THanks@Lasiaf我的错误。虽然
Zend_应用程序\u引导\u引导\u引导
在内部使用
Zend_注册表
,但它不是全局可用的实例。