Database connection for Multi-tenant SaaS

Hello, guys

I am working in a multi-tenant software (SaaS) built with Yii2 on the Advanced Template, but i am not having the desired result about the tenants database connection.

I am trying to set the Database Connection as next in my config file for the frontend:




$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

]];



Then I have a two steps log in, where the first asks for the login (tenant id) and the next provides the user and password. On the first controller i do the next with:





    	$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'));

    	

    




I get successfully the account (tenant) data and store it in session, but i guess my error is on instantiating the yii\db\Connection on the model’s getDb() method.

Hope can help me.

Regards!