2013-07-04 2 views
0

Как получить все активное соединение, когда мы используем несколько баз данных?Получить все активные соединения с БД

Я пробовал:

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' 
), 
+0

@Dagon где показывать? –

+0

вы можете проверить его с помощью 'Yii :: app() -> db-> getactive()' или 'if (Yii :: app-> db-> active)' – ineersa

+0

, но это странно. GetComponents() должен работать. – ineersa

ответ

0

Если вы в CActiveRecord инстанции ($ модель), вы можете использовать $model->getDbConnection(); или CActiveRecord::$db, чтобы получить текущую базу данных соединения;

0

В справочнике класса вы можете прочитать:

общественного массив getComponents (булев $ loadedOnly = истина)

Итак, если вы хотите получить каждое соединение вместо только активов:

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

Следует перечислить все

Смежные вопросы