警予:多个数据库连接失败(Yii : multiple databases connection f

2019-09-23 17:07发布

我读了警予文档和下面的代码应该工作;

好了,它不。 :))

db是主数据库

DB1和DB2是辅助数据库

这里有什么问题?

该网站是在线,在www.linkbook.co ,它不能连接到任何数据库

'db' => array(
    'connectionString' => 'mysql:host=localhost;dbname=linkbookco',
    'emulatePrepare' => true,
    'username' => 'user',
    'password' => 'password',
    'charset' => 'utf8',
    'tablePrefix' => '',
),

    'db1' => array(
    'connectionString' => 'mysql:host=localhost;dbname=linkbookco1',
    'username'         => 'user',
    'password' => 'password',
    'charset' => 'utf8',
    'tablePrefix' => '',
    'class'            => 'CDbConnection'          // DO NOT FORGET THIS!
),

    'db2' => array(
    'connectionString' => 'mysql:host=localhost;dbname=linkbookco2',
    'username'         => 'user',
    'password' => 'password',
    'charset' => 'utf8',
    'tablePrefix' => '',
    'class'            => 'CDbConnection'          // DO NOT FORGET THIS!
),

Answer 1:

db是预定义的组件Yii ,所以bedefault CActiveRecord使连接用db 。 因此,对于其他部件已使用创建CDbConnection类,你必须在外部激活它们连接。

所以,你需要覆盖getDbConnection()的方法CActiveRecord

扩展CActiveRecord像特定的数据库连接db1 。 保存为Db1CActiveRecord.php和组件目录放置。

<?php
/**
 * 
 * Used for db1 database connection
 *
 */
class Db1CActiveRecord extends CActiveRecord {

    private static $db1 = null;

    public function getDbConnection()
    {
        if (self::$db1 !== null)
            return self::$db1;
        else
        {
            self::$db1 = Yii::app()->db1;
            if (self::$db1 instanceof CDbConnection)
            {
                self::$db1->setActive(true);
                return self::$db1;
            }
            else
                throw new CDbException(Yii::t('yii','Active Record requires a "db" CDbConnection application component.'));
        }
    }
}

现在,你需要使用Db1CActiveRecord的模型类数据库db1 。 喜欢:

class Db1Model extends Db1CActiveRecord{
   ......
}

实现这样两个DB1和DB2数据库。



文章来源: Yii : multiple databases connection fails