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

Yii2 предоставляет удобный и гибкий способ работы с несколькими базами данных одновременно. Для этого вам понадобится настроить соединение с каждой базой данных и указать их в конфигурационном файле.

1. Настройка соединений с базами данных:

Чтобы настроить соединение с каждой базой данных, вам необходимо отредактировать файл конфигурации config/db.php. В этом файле вы можете определить различные компоненты базы данных, которые будут использоваться в вашем приложении.

Пример настройки двух баз данных MySQL:

return [
    'components' => [
        'db' => [
            'class' => 'yiidbConnection',
            'dsn' => 'mysql:host=localhost;dbname=db1',
            'username' => 'root',
            'password' => 'password',
            'charset' => 'utf8',
        ],
        'db2' => [
            'class' => 'yiidbConnection',
            'dsn' => 'mysql:host=localhost;dbname=db2',
            'username' => 'root',
            'password' => 'password',
            'charset' => 'utf8',
        ],
    ],
];

2. Использование нескольких баз данных:

После настройки соединений, вы можете использовать их в вашем коде. Для выполнения запросов к определенной базе данных вы можете явно указать имя компонента, используя Yii::$app->db2 вместо Yii::$app->db. Например:

$users = Yii::$app->db->createCommand('SELECT * FROM users')->queryAll();
$products = Yii::$app->db2->createCommand('SELECT * FROM products')->queryAll();

3. Миграции и транзакции:

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

return [
    'components' => [
        'db' => [
            'class' => 'yiidbConnection',
            'dsn' => 'mysql:host=localhost;dbname=db1',
            'username' => 'root',
            'password' => 'password',
            'charset' => 'utf8',
        ],
        'db2' => [
            'class' => 'yiidbConnection',
            'dsn' => 'mysql:host=localhost;dbname=db2',
            'username' => 'root',
            'password' => 'password',
            'charset' => 'utf8',
        ],
        'dbMigration' => [
            'class' => 'yiidbConnection',
            'dsn' => 'mysql:host=localhost;dbname=db1',
            'username' => 'root',
            'password' => 'password',
            'charset' => 'utf8',
        ],
    ],
];

Затем вы можете использовать соответствующий компонент базы данных при выполнении миграций:

yii migrate --db=dbMigration

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

Вот как можно использовать транзакции:

$transaction1 = Yii::$app->db->beginTransaction();
$transaction2 = Yii::$app->db2->beginTransaction();

try {
    // выполнение операций с базой данных 1

    // выполнение операций с базой данных 2

    $transaction1->commit();
    $transaction2->commit();
} catch (Exception $e) {
    $transaction1->rollBack();
    $transaction2->rollBack();
    throw $e;
}

Это позволит сохранить целостность данных в случае возникновения ошибки при выполнении операций.

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