2

我阅读了 yii 文档,下面的代码应该可以工作;

好吧,它没有。:))

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!
),
4

1 回答 1

6

db是 的预定义组件Yii,因此默认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 数据库实现这种方式。

于 2012-10-08T09:45:23.247 回答