Yii2:如何动态更改数据库连接字符串?

问题描述

我想更改数据库连接字符串及其凭据 在运行时。

我有数据库和许多子数据库。 并希望切换存储在主数据库中的数据库字符串及其凭据。

不是这样的Yii::$app->dbYii::$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;
}