Класс модели доступа Yii1 с использованием второго подключения к базе данных. Множественное подключение к базе данных

Я использовал несколько подключений к базе данных.

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), запись не обновляется

Пожалуйста, помогите мне решить эту проблему.

Класс модели

class Modelclass extends CActiveRecord
{
    // model class code
}

person Kailas    schedule 18.01.2017    source источник
comment
как вы используете соединение..... не могли бы вы опубликовать еще немного кода   -  person abhit    schedule 18.01.2017
comment
наконец я узнаю решение. спасибо лакшай.   -  person Kailas    schedule 18.01.2017


Ответы (1)


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

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

Шаг 1. Создайте строку подключения к базе данных в config/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. Создайте новый класс в компонентах для доступа ко второму подключению к базе данных (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.'));
            }

        }

    }
}

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

class Modelclass extends Db2ActiveRecord
{
    // model class code
}
person Kailas    schedule 18.01.2017