【问题标题】:Yii1 access model class using 2nd database connection. Multiple database connectionYii1 使用第二个数据库连接访问模型类。多数据库连接
【发布时间】:2017-01-18 05:16:58
【问题描述】:

我使用了多个数据库连接。

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
}

【问题讨论】:

  • 你是如何使用连接的.....你能不能再贴一些代码
  • 我终于找到了解决方案。谢谢 lakshay。

标签: php yii yii-components yii1.x


【解决方案1】:

在 Yii1 中访问多个数据库连接

以下是步骤:

Step1:在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,
    ),
)

Step2:在组件中创建新类以访问第二个数据库连接(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
}

【讨论】:

    猜你喜欢
    • 2013-10-08
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多