Задать вопрос
@yar_stun
frontend-dev

Работа с несколькими БД Yii2?

Здравствуйте. Пытаюсь подключиться ко второй БД. Много гуглил, смотрел инфу. Возможно информация устарела, или я что-то не понимаю.
В директории config создал новый файл db2.php:
<?php

return [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;port=3307;dbname=example_1,
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
];


Соответственно, в файле config/web.php добавил эти строчки:
$db2 = require __DIR__ . '/db2.php';
'db2' => $db2,

Все по шаблону основной базы db.php
При определении в модели:
public static function getDb()
    {
        return \Yii::$app->db2;
    }

Ошибка, отсутствие компонента. Возможно не так произвожу подключение, но пробовал разные предложенные способы...Подскажите, что не так, пожалуйста
  • Вопрос задан
  • 302 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Для начала Вам необходимо создать по компоненту для каждого подключения:
return [
'components' => [
'db1' => [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=db1name',
    'username' => 'db1username',
    'password' => 'db1password',
],
'db2' => [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=localhost;dbname=db2name',
    'username' => 'db2username',
    'password' => 'db2password',
    ],
],
];


Потом в коде своего приложения в моделях ActiveRecord Вам необходимо переопределить метод getDb().
public function getDb() {
    return Yii::$app->db1;
}

//db2
public function getDb() {
    return Yii::$app->db2;
}

Модели, в которых Вы переопределили метод getDb(), указав db1 как соединение с базой, будут получать данные из базы db1, и наоборот:
ModelName::find()->select('*')->all();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы