Соединение с несколькими базами данных на yii2

Я пытаюсь использовать несколько соединений с базой данных на платформе yii2. Под моим файлом db.php внутри папки config у меня есть этот кусок кода:

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

В моем test.php в папке моделей, у меня есть это ниже …

namespace app\models;

use Yii;
use yii\base\Model;
use yii\db\Query;

class GetAds extends Model
{
public function ads()
{

$test = Yii::$app->db1->createCommand((new \yii\db\Query)->select('*')->from('members'))->queryAll();

}

когда я пытаюсь получить доступ, я получаю это сообщение об ошибке «Получение неизвестного свойства: yii \ web \ Application :: db1»

Как мне решить эту проблему? Я на самом деле следовал этому руководству Несколько подключений к базе данных и Yii 2.0

Где я сделал не так?

Хуже всего то, что я настроил использовать только одну базу данных … и на своей модели я использую этот код …

    namespace app\models;

use Yii;
use yii\base\Model;
use yii\db\ActiveRecord;
use yii\db\Query;

class GetAds extends ActiveRecord
{
public static function tableName()
{
return 'ads_page';
}

public static function ads()
{

$count=(new \yii\db\Query)->from('ads_page')->count('*');
}
}

И я получаю эту ошибку

Database Exception – yii\db\Exception
could not find driver
↵
Caused by: PDOException
could not find driver

Почему так сложно использовать yii2? Я следую за всем отсюда http://www.yiiframework.com/doc-2.0/guide-db-dao.html

пожалуйста помоги

5

Решение

Я решил эту проблему. Это может помочь другим, кто нуждается в этом.

В config / web.php я добавил эту строку'db2' => require(__DIR__ . '/db2.php'),«просто по этому утверждению»'db' => require(__DIR__ . '/db.php'),» (без кавычек)

и создал еще один новый файл db2.php в папке config, используя те же коды, что и в db.php:

<?php

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

и вызвать первую базу данных. Я использую это:

$row = Yii::$app->db->createCommand("SELECT * FROM test")->queryOne();

Чтобы запросить таблицу из второй базы данных, я использую это:

$row = Yii::$app->db2->createCommand("SELECT * FROM test2")->queryOne();
4

Другие решения

  1. Убедитесь, что у вас есть php_mysql а также php_pdo_mysql расширения
    установлены.
  2. \yii\db\ActiveRecord класс должен знать, с какой базой данных он работает

Это код, который вы добавляете в модель, чтобы он знал о своей базе данных.

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

Вы также можете сделать это:

new User(array("db" => Yii::$app->db1));

или сделайте это:

User::find()->where(...)->all(Yii::$app->db2);
1
По вопросам рекламы [email protected]