2017-01-09 92 views
3

在我的Yii2(基础应用程序)web.php中,我将NULL连接配置为第二个数据库连接。Yii2在运行时设置db连接

这需要填充其从记录来的主数据库连接的有效参数:

'db' => require(__DIR__ . '/db.php'), 
'db2' => [ 
    'class' => 'yii\db\Connection', 
    'dsn' => NULL, 
    'username' => NULL, 
    'password' => NULL, 
    'charset' => 'utf8', 
], 

初始化程序()我需要填写NULL参数与我检索值后从另一个数据库中进一步在模型中使用它。

我如何在Yii2中实现这一目标?

回答

6

没问题,这是支持

\Yii::$app->db2->close(); // make sure it clean 
\Yii::$app->db2->dsn= 'yourdsn'; 
\Yii::$app->db2->username = 'username'; 
\Yii::$app->db2->password = 'password'; 

做,现在你可以使用它

Yii::$app->db2->... 

另一种方式:

$connection = new \yii\db\Connection([ 
    'dsn' => $dsn, 
    'username' => $username, 
    'password' => $password, 
]); 
$connection->open(); 
$command = $connection->createCommand('SELECT * FROM post')->....; 

参见:http://www.yiiframework.com/doc-2.0/yii-db-connection.html

+0

非常感谢。这工作完美。我正在使用第一种方法。现在我可以在我的模型中只需要访问“其他”数据库:public static function getDb(){return Yii :: $ app-> db2; }。这会从正确的数据库中提取它。作为一个方面,我已经将“其他”数据库的所有模型移动到单独的名称空间中。我想我也可以为这个命名空间单独扩展ActiveRecord,但是在那里使用getDB,然后将那个命名空间中的所有模型扩展到那个AR类。 –