2017-01-18 47 views
0

Я использовал несколько соединений с базой данных.Yii1 доступ модель класс использование 2-я база данных подключение. Несколько соединений с базой данных

main.php

'components'=>array(
    'db'=>array(
     'connectionString' => 'mysql:host=localhost;dbname=testdrive', 
     'emulatePrepare' => true, 
     'username' => 'root', 
     'password' => '', 
     'charset' => 'utf8', 
    ), 
    'db2'=>array(
      'connectionString' => 'mysql:host=remotelocalhost;dbname=seconddb', 
      'emulatePrepare' => true, 
      'username' => 'root', 
      'password' => '', 
      'charset' => 'utf8', 
      'class'=>'CDbConnection' 
     ), 
    ), 
) 

Когда класс модели используется второе соединение с базой данных (удаленной базы данных - db2) запись не обновляется

Plz помочь мне решить эту проблему.

Модели Класс

class Modelclass extends CActiveRecord 
{ 
    // model class code 
} 
+0

, как это вы используете соединение ..... мог у, пожалуйста, отправьте еще код – lakshay

+0

, наконец, я выясню решение. спасибо лакшай. – Kailas

ответ

1

доступ множественного подключение к базе данных в Yii1

Ниже приведены шаги:

Шаг 1: Создание строки подключения к базе данных в конфигурации/main.php

'components'=>array(
    'db2'=>array(
     'class'=>'CDbConnection', 
     'connectionString' => 'mysql:host=RemoteHostIpAddress;dbname=Remote_DB_Name', 
     'emulatePrepare' => true, 
     'username' => 'Remote_DB_User_Name', 
     'password' => 'Remote_DB_Password', 
     'charset' => 'utf8', 
     'enableParamLogging' => true, 
    ), 

    'db'=>array(
     'class'=>'CDbConnection', 
     'connectionString' => 'mysql:host=localhost;dbname=DB_Name', 
     'emulatePrepare' => true, 
     'username' => 'DB_User_Name', 
     'password' => 'DB_Password', 
     'charset' => 'utf8', 
     'enableParamLogging' => true, 
    ), 
) 

Шаг2: Создать новый класс в компонентах для доступа 2-го подключения к базе данных (db2)

class Db2ActiveRecord extends CActiveRecord 
{ 
    public static $db2; 

    public function getDbConnection() 
    { 

     if(self::$db2!==null) 
      return self::$db2; 
     else 
     { 
      self::$db2=Yii::app()->db2; 
      self::$db2->connectionString; 

      if(self::$db2 instanceof CDbConnection) 
      { 
       self::$db2->setActive(true); 
       return self::$db2; 
      } 
      else{ 
       throw new CDbException(Yii::t('yii','Active Record requires a "db" CDbConnection application component.')); 
      } 

     } 

    } 
} 

Step3: расширяет класс модели из 2-й базы данных, используя класс, созданный в компонентах

class Modelclass extends Db2ActiveRecord 
{ 
    // model class code 
} 
+0

хорошо .................... – lakshay