2

私は yii ドキュメントを読み、次のコードが機能するはずです。

まあ、そうではありません。:))

db はプライマリ データベースです。

db1 と db2 はセカンダリ データベースです。

ここで何が悪いのですか?

Web サイトは でオンラインですが、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()SOのメソッドを上書きする必要がありますCActiveRecord

CActiveRecordのような特定のデータベース接続用に拡張しますdb1。これを名前を付けて保存しDb1CActiveRecord.php、components ディレクトリに配置します。

<?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 に答える