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'
),
4

2 に答える 2

0

CActiveRecord インスタンス ($model) にいる場合は、$model->getDbConnection();またはCActiveRecord::$dbを使用して現在の接続データベースを取得できます。

于 2013-07-15T17:26:07.170 に答える
0

クラスリファレンスでは、次を読むことができます:

public array getComponents(boolean $loadedOnly=true)

したがって、アクティブな接続だけでなく、すべての接続を取得する場合は、次のようにします。

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

すべてをリストする必要があります

于 2014-11-26T13:03:52.183 に答える