问题描述
我想更改数据库连接字符串及其凭据 在运行时。
我有主数据库和许多子数据库。 并希望切换存储在主数据库中的数据库字符串及其凭据。
不是这样的Yii::$app->db、Yii::$app->db2、..连接名称
解决方法
我找到了切换数据库的解决方案 Yii 提供通过 Yii::$app->set() 函数设置或覆盖组件。 所以我们可以在应用程序中的任何地方覆盖它。
在全局更改数据库的情况下,我们可以根据条件在on beforeRequest中覆盖它
在config/main.php
'components'=>[
...
],'on beforeRequest' => function() {
$model = app\models\MainFY::findOne(Yii::$app->session->get('activeSession'));
Yii::$app->set('db',[
'class' => 'yii\db\Connection','dsn' => $model->db_string,'username' => $model->db_username,'password' => $model->db_password,'charset' => 'utf8','enableSchemaCache' => !YII_DEBUG,]);
},
在模型 app\models\MainFY 中,我使用主数据库连接
public static function getDb() {
return Yii::$app->dbMain;
}