Добавляем настройки подключения к нескольким БД в Yii2

Для работы с несколькими базами данных в Yii2, нужно добавить все новые соединения в файл config/web.php:

<?php

'db' => require(__DIR__ . '/db.php'),

'myNewDB' => [
    'class' => 'yii\db\Connection',
    'dsn' => 'mysql:host=127.0.0.1;dbname=my_new_database',
    'username' => 'user',
    'password' => 'password',
    'charset' => 'utf8',
],

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

<?php

'db' => require(__DIR__ . '/db.php'),
'myNewDB' => require(__DIR__ . '/myNewDB.php'),

Не переименовываете свойство "db" компонента, так как это приведет к ошибке.

Указываем нужную БД для использования в моделе Yii2

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

<?php

class MyModel extends \yii\db\ActiveRecord {

    //...

    public static function getDb() {
        return Yii::$app->get('myNewDB');
    }

    //...

}

Функция getDb устанавливает нужное нам соединения с БД для модели.

Работа joinWith() для разных баз данных в Yii2

И так, когда обе таблицы находятся в одной базе данных, например: Author (model \app\models\Author.php) и Post (model \app\models\Post.php) мы делаем так:

$authorsPosts = \app\models\Author::find()
    ->joinWith('post')
    ->where(['post.visibility' => \app\models\Post::STATUS_VISIBILITY])
    ->all();

Такая связь для таблиц находящихся в разных база данных будет выглядеть так:

$authorsPosts = \app\models\Author::find()
    ->joinWith(['order' => function($query) { 
        return $query->from('myNewDB.' . \app\models\Post::tableName())
            ->andWhere(['post.visibility' => \app\models\Post::STATUS_VISIBILITY]); 
        }])
    ->all();

При этом таблица Post из базы данных myNewDB (модель: \app\models\Order.php), использует метод для настройки соединения с базой данных getDB().

И напоследок, используйте соединение с несколькими базами данных в одном приложении с умом, не надо делать разные базы для каждой таблицы, но в свою очередь и запихивать множество таблиц в одну базу (особенно при кардинальном отличии области применения) тоже не стоит.