获取所有活动数据库连接

时间:2013-07-04 01:35:50

标签: php yii

如何在使用多个数据库时获取所有活动连接?

我试过了:

foreach(Yii::app()->getComponents() as $component)
{       
    if ($component instanceof CDbConnection) 
    {
        die(var_dump($component));
    }
}

但它看起来不像Yii::app()->getComponents()结果中的数据库组件。

我的数据库配置:

'db'=>array(
        'connectionString' => 'pgsql:host=127.0.0.1;port=yyyy;dbname=db1',
        'emulatePrepare' => false,
        'username' => 'user1',
        'password' => 'pass1',
        'schemaCachingDuration' => YII_DEBUG ? 0 : 86400000, // 1000 days
        'enableParamLogging' => YII_DEBUG,
        'charset' => 'utf8'
),

'db2'=>array(
        'class' => 'CDbConnection',
        'connectionString' => 'pgsql:host=xxx.xxx.xxx;port=xxxx;dbname=db2',
        'emulatePrepare' => false,
        'username' => 'user2',
        'password' => 'pass2',
        'schemaCachingDuration' => YII_DEBUG ? 0 : 86400000, // 1000 days
        'enableParamLogging' => YII_DEBUG,
        'charset' => 'utf8'
),

2 个答案:

答案 0 :(得分:0)

如果您在CActiveRecord实例($ model)中,则可以使用$model->getDbConnection();CActiveRecord::$db来获取当前连接数据库;

答案 1 :(得分:0)

在课程参考中,您可以阅读:

  

public array getComponents(boolean $ loadedOnly = true)

所以,如果你想得到每个连接而不是只有活动:

foreach (Yii::app()->getComponents(false) as $component)
{
    if (is_array($component) && $component['class'] == 'CDbConnection') 
    {
        print_r($component);
    }
}

应列出所有