2015-05-26 10 views
5

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

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»

Как решить эту проблему? Я фактически следовал этому руководству Multiple database connections and 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 

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

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

+0

Кажется мне, что это не имеет ничего общего с Yii вообще ... «не удалось найти драйвер» больше похоже на ошибку «PDO». Вы уверены, что все соответствующие модули php установлены? «PDO» недостаточно, ему также нужно «mysqlnd» iirc – Blizz

+0

@Blizz, спасибо за подсказку, я включил pdo_mysql в настройках PHP с помощью WAMP .... Это решает проблему PDO. – nodeffect

+0

Вы объединяете конфигурацию db с другими конфигурационными массивами? – Tony

ответ

4

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

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

и создал еще один новый файл db2.php в папке конфигурации, используя те же коды, в 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(); 
+1

, если используется несколько db в режиме master/slave, а затем проверьте ниже ссылку http://www.yiiframework.com/doc-2.0/guide-db-dao .html – kurmi

+0

Что делать, если я использую ActiveRecord вместо использования 'Yii :: $ app :: db-> createCommand..', например, если я уже использовал активные методы записи, такие как' ModelName :: find() -> all() ' в моем приложении теперь я хочу, чтобы все мои клиенты использовали разные db для своей компании. как и где указать приложение, какую базу данных использовать? –

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

Это код вам добавить в модель, чтобы она осознает свою базу данных.

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

Что делать, если я использую ActiveRecord вместо Yii :: $ app :: db-> createCommand ..например, если я уже использовал активные методы записи, такие как ModelName :: find() -> all() в моем приложении, теперь я хочу, чтобы все мои клиенты использовали разные db для своей компании. как и где указать приложение, какую базу данных использовать? Классифицирует ли ActiveRecord всегда вызов этой функции 'getDb()' –

 Смежные вопросы

  • Нет связанных вопросов^_^