Динамически переключиться между базами
Динамически переключиться между базами
Добрый день, подскажите в общих чертах - как можно реализовать динамическое переключение между базами в зависимости от подключенного пользователя.
т.е. если залогинился пользователь User1 то подключиться к DB1, если User2 то к DB2.
Спасибо.
т.е. если залогинился пользователь User1 то подключиться к DB1, если User2 то к DB2.
Спасибо.
Re: Динамически переключиться между базами
Создать компонент приложения db2
Re: Динамически переключиться между базами
@Onotole
не совсем понял, а можно ссылку или немного подробнее ?
не совсем понял, а можно ссылку или немного подробнее ?
- vitalik1183
- Сообщения: 1675
- Зарегистрирован: 2014.07.01, 08:42
Re: Динамически переключиться между базами
Откройте конфигурацию, там добавлен компонент db
Добавьте компонент db2 и пропишите свои данные.
Добавьте компонент db2 и пропишите свои данные.
Yii2!
Re: Динамически переключиться между базами
не правильно объяснил,
как программно создать коннект к базе ?
как программно создать коннект к базе ?
Re: Динамически переключиться между базами
configs/web.php
Model
Код: Выделить всё
$config = [
...
'components' => [
...
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db1_name',
'username' => 'db_user',
'password' => 'db_password',
],
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db2_name',
'username' => 'db_user',
'password' => 'db_password',
],
]
Код: Выделить всё
public function getDb() {
return Yii::$app->db2;
}
Re: Динамически переключиться между базами
А как быть, если баз много, и конкретное их количество не известно? (Например, данные пользователя лежать в отдельной базе для каждого пользователя).
main_db.users - табличка пользователей
userdb_{$user->id}.log - лог пользователя в базе данных userdb_1 для пользователя 1 и тд.
Код: Выделить всё
$users = User::find()->all();
foreach($users as $user) {
//тут надо подключиться/пере-подключиться к пользовательской базе
$user_log = new UserDbLogTable();
...
$user_log->save();
}
userdb_{$user->id}.log - лог пользователя в базе данных userdb_1 для пользователя 1 и тд.
Последний раз редактировалось warwar.dp 2016.08.25, 17:41, всего редактировалось 2 раза.
Re: Динамически переключиться между базами
warwar.dp писал(а):А как быть, если баз много, и конкретное их количество не известно?
Код: Выделить всё
$connection = Yii::createObject([
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=testdb',
'username' => 'demo',
'password' => 'demo',
]);
Re: Динамически переключиться между базами
Не совсем понятно, как делать подключение и отключение для баз данных?SiZE писал(а):warwar.dp писал(а):А как быть, если баз много, и конкретное их количество не известно?Код: Выделить всё
$connection = Yii::createObject([ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=localhost;dbname=testdb', 'username' => 'demo', 'password' => 'demo', ]);
ps. Пользователей много, намного больше, чем разрешенное количество подключений к серверу БД.
ps2. Некоторые таблички логов могут находиться на других серверах БД.
Re: Динамически переключиться между базами
Это уже не вписывается в эту тему.warwar.dp писал(а):Не совсем понятно, как делать подключение и отключение для баз данных?
ps. Пользователей много, намного больше, чем разрешенное количество подключений к серверу БД.
ps2. Некоторые таблички логов могут находиться на других серверах БД.
Re: Динамически переключиться между базами
Может статью про это напишу.warwar.dp писал(а):ps. Пользователей много, намного больше, чем разрешенное количество подключений к серверу БД.
Последний раз редактировалось ElisDN 2016.11.09, 15:26, всего редактировалось 1 раз.
Re: Динамически переключиться между базами
Как раз тема динамического переключения между базами не раскрыта.SiZE писал(а):Это уже не вписывается в эту тему.warwar.dp писал(а):Не совсем понятно, как делать подключение и отключение для баз данных?
ps. Пользователей много, намного больше, чем разрешенное количество подключений к серверу БД.
ps2. Некоторые таблички логов могут находиться на других серверах БД.
Re: Динамически переключиться между базами
warwar.dp писал(а):Как раз тема динамического переключения между базами не раскрыта.
Код: Выделить всё
private $db;
public static function dbList()
{
return [
'db1' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=testdb',
'username' => 'demo',
'password' => 'demo',
],
'dbN' => [/*...*/]
];
}
public function db($dbName)
{
if (empty($this->db[$dbName]) {
$list = static::dbList();
$this->db[$dbName] = Yii::createObject($list[$dbName]);
}
return $this->db[$dbName];
}