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

问题描述 投票:0回答:5

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

有时打电话

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

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

谢谢!

zend-framework zend-db-table
5个回答
4
投票

很晚才回到这个话题,但这里的答案都对我没有帮助。我的一些数据库模型需要使用“tdb”,并且将以下代码添加到每个类中以自动发生这种情况:

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

感谢大家一路以来的建议!


3
投票

Zend_Db_Table_Abstract 提供了一个静态方法来设置默认数据库适配器。请按以下步骤操作:

Zend_Db_Table_Abstract::setDefaultAdapter($adapter);

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

注意:在线文档有时并没有明确说明这一点,因此第二个最佳检查位置是此处的 API:http://framework.zend.com/apidoc/core/


1
投票

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

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

$this->_db = $adapter1;

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


1
投票

可以使用 init 函数,它不用于

Zend_Db_Adapter_Abstract,
可以在你的类中使用来设置需要完成的任何操作。
_setAdapter
接受命名注册表项的字符串。

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

0
投票

生产中特定不同数据库的示例。 您可以在这里应用一些逻辑。

class SomeTable extends Zend_Db_Table_Abstract {

    /*
     * 
     */

    public function init(){

        if(APPLICATION_ENV == 'production'){
            $secondary_db = Zend_Db::factory(
                'PDO_MYSQL',
                Array(
                    'host'      => DB_SECONDARY_HOST,
                    'username'  => DB_SECONDARY_USER,
                    'password'  => DB_SECONDARY_PASSWORD,
                    'dbname'    => DB_SECONDARY_NAME,
                    'charset'   => 'utf8'
                )
            );

            $this->_setAdapter($secondary_db);
        }
    }

    /*
     * 
     */
}
© www.soinside.com 2019 - 2024. All rights reserved.