skobanev
@skobanev
Слепой ПЬЮ!

Как в Yii2 безболезненно подменить одну таблицу из другой БД?

Добрый. Извините за корявый язык вопроса.
Пишу app на YII2. Сделал 2 БД. Одну тестовую, которую мучаю, другую которая ведется уже на реальных данных.
Есть таблица с конфигом. При добавлении в одну из БД какой нить новой строки конфига - приходится воссоздавать ее в другой.
Как мне безболезненно вынести подключение к другой БД именно данной таблицы? Таблицу заполняем вручную.
Написано много строк кода и эта таблица используется у меня практически в каждом расчете. Лопатить весь код увы, не хочется.
При беглом чтении мануалов на эту тему, понял, что легче все оставить как есть.
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
@sidni
Php Developer
Ответ из SO
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',
    ],
],
];

QueryBuilder:
Yii::$app->db1->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll();
Yii::$app->db2->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll();

ActiveRecord
public static function getDb() {
    return Yii::$app->db2;
    // return Yii::$app->db1;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
За такое вообще руки отрывают. Если у вас конфигурация в базе чтобы ее могли менять пользователи или админы - ладно, но тогда вас это не должно волновать, а код должен быть организован так чтобы это модно было один раз оттестировать и забыть.

Если же это какая-то внутренняя конфигурация приложения то всплывает два вопроса: почему не миграции и почему вообще не в непосредственно конфигурации.

Если все это не заставляет задуматься то остаётся две вещи: принять факт что тестовая база не должна влиять на прод и то что единственный адекватный вариант получить данные с прода - дамп базы и ее развертывание на тестовый сервер
Ответ написан
VerbAlexVlad
@VerbAlexVlad
Программист-любитель
return [
'components' => [
    'db2' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=db2name', 
        'username' => 'db2username',
        'password' => 'db2password',
    ],
],
];

QueryBuilder:
(new \yii\db\Query)->select('*')->from('tbl_name')->createCommand(Yii::$app->db2)->queryAll()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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