использование дополнительной базы данных после входа в систему yii - PullRequest
0 голосов
/ 30 июня 2011

Кто-нибудь знает, как я могу добавить дополнительное поле подключения к базе данных в файл конфигурации yii после того, как я успешно вошел в систему на моем сайте?

У нас есть глобальная системная база данных, в которой мы настраиваем наших пользователей и сохраняем поле с именем их базы данных. Я хотел бы создать другое соединение с этой базой данных после аутентификации пользователя. Таким образом, ссылаясь на него, как Yii :: app () -> clientDB. Это возможно?

Каждый клиент в нашей системе имеет собственную базу данных с таблицами.

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Да, вы можете. В вашем конфигурационном файле это будет выглядеть так:

'db'=>array(
        'connectionString' => 'mysql:host=hostIP;port=3306;dbname=database1',
                    'class'=>'CDbConnection',
        'emulatePrepare' => true,
        'username' => 'username1',
        'password' => 'password1',
        'charset' => 'utf8',
    ),
            'db2'=>array(
        'connectionString' => 'mysql:host=hostIP2;port=3306;dbname=database2',
                    'class'=>'CDbConnection',
        'emulatePrepare' => true,
        'username' => 'username2',
        'password' => 'password2',
        'charset' => 'utf8',
    ),

db будет база данных по умолчанию. Всякий раз, когда вы хотите переключиться, вы должны написать это в контроллере:

$connection->Yii::app()->db2;
//then you would pass the connection into whatever you are using for your queries.
//For example for an raw SQL command:
$command=$connection->createCommand($sqlQuery);
$command->execute();
1 голос
/ 30 июня 2011

Вы можете достичь этого с помощью этого кода (не проверено, но должно работать):

$connection = new CDbConnection($dsn, $username, $password);
$connection->active = true;
Yii::app()->setComponent('clientDB', $connection);
...