Yii2内置的多租户SaaS

Yii2内置的多租户SaaS,yii2,php,multi-tenant,yii2-advanced-app,Yii2,Php,Multi Tenant,Yii2 Advanced App,我在一个基于高级模板构建的多租户软件(SaaS)中工作,但是我没有得到租户数据库连接的预期结果 我正在尝试将数据库连接设置为前端配置文件中的下一个: $defaultAdminDB = [ 'class' => 'yii\db\Connection', 'dsn' => 'pgsql:host=localhost;dbname=untitled', 'username' => 'postgres', 'password' => 'myPass', 'c

我在一个基于高级模板构建的多租户软件(SaaS)中工作,但是我没有得到租户数据库连接的预期结果

我正在尝试将数据库连接设置为前端配置文件中的下一个:

$defaultAdminDB = [
  'class' => 'yii\db\Connection',
  'dsn' => 'pgsql:host=localhost;dbname=untitled',
  'username' => 'postgres',
  'password' => 'myPass',
  'charset' => 'utf8',
];

$config = [
  'components' => [
    'db' => function(){
      if (Yii::$app->session->get('login', false)){
        return [
          'class' => 'yii\db\Connection',
          'dsn' => Yii::$app->session->get('client_connection.dns'),
          'username' => Yii::$app->session->get('client_connection.username'),
          'password' => Yii::$app->session->get('client_connection.password'),
          'charset' => 'utf8',
        ];
      }

      return [
        'class' => 'yii\db\Connection',
        'dsn' => 'pgsql:host=localhost;dbname=untitled',
        'username' => 'postgres',
        'password' => 'myPass',
        'charset' => 'utf8',
      ];
    },
    'dbAdmin' => $defaultAdminDB
  ]
];
然后我有一个两步登录,第一步要求登录(租户id),第二步提供用户和密码。在第一个控制器上,我使用以下命令执行下一步操作:

$account = \frontend\models\AdminAccounts::findOne(['login'=>$this->login]);

if (!$account){
  $this->addError('login', Yii::t('app', 'Account data not found.'));
  return false;
}

$dns = sprintf('pgsql:host=%s;dbname=%s', $account->getAttribute('db_host'), $account->getAttribute('db'));

Yii::$app->session->set('login', $this->login);
Yii::$app->session->set('client_connection.dns', $dns);
Yii::$app->session->set('client_connection.username', $account->getAttribute('db_user'));
Yii::$app->session->set('client_connection.password', $account->getAttribute('db_pass'));
我成功地获取了帐户(租户)数据并将其存储在会话中,但我猜我的错误是在模型的
getDb()
方法上实例化
yii\db\Connection

希望能帮助我。 问候

你可以试试

Yii::$app->db = new \yii\db\Connection([
'dsn' => Yii::$app->session->get('client_connection.dsn'),
'username' => Yii::$app->session->get('client_connection.username'),
'password' => Yii::$app->session->get('client_connection.password'),
]);

如果您正在更改现有数据库连接的数据库连接信息,则应关闭现有连接(Yii::$app->db->close()),更改连接信息,然后打开新连接(Yii::$app->db->open())。

您能解释一下您所做的事情以及为什么它会回答此问题吗