Yii:多个数据库连接失败

时间:2012-10-08 09:02:06

标签: database yii multiple-databases

我阅读了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!
),

1 个答案:

答案 0 :(得分:6)

dbYii的预定义组件,因此bedefault CActiveRecord使用db建立连接。因此,对于使用CDbConnection类创建的其他组件,您必须在外部激活它们的连接。

所以你需要覆盖getDbConnection()的{​​{1}}方法。

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

为db1和amp;实现这种方式db2数据库。