1

複数のデータベースを処理するために main.php を既に構成していますが、gii もエラーを返します my main.php has following settings for connections

'db'=>array(
        'class' => 'CDbConnection',
        'connectionString' => 'mysql:host='.$dbhost.';dbname='.DATABASENAME,
        'emulatePrepare' => true,
        'username' => YII_DB_UNAME,
        'password' => YII_DB_PASS,
        'charset' => 'utf8',
    ),

'db_transport'=>array(
        'class' => 'CDbConnection',
        'connectionString' => 'mysql:host='.$dbhost.';dbname='.YII_TRANSPORT_DB,
        'emulatePrepare' => true,
        'username' => YII_DB_UNAME,
        'password' => YII_DB_PASS,
        'charset' => 'utf8',
    ),

'db_admission'=>array(
        'class' => 'CDbConnection',
        'connectionString' => 'mysql:host='.$dbhost.';dbname='.YII_ADMISSION_DB,
        'emulatePrepare' => true,
        'username' => YII_DB_UNAME,
        'password' => YII_DB_PASS,
        'charset' => 'utf8',
    ),

'db_extendedsims'=>array(
        'class' => 'CDbConnection',
        'connectionString' => 'mysql:host='.$dbhost.';dbname='.YII_EXTENDEDSIMS_DB,
        'emulatePrepare' => true,
        'username' => YII_DB_UNAME,
        'password' => YII_DB_PASS,
        'charset' => 'utf8',
    ),

GII を使用し、データベース接続で 'db' (引用符なし) と書くと動作しますが、'db_extendedsims' と書くと動作しません。すべての接続で機能させるにはどうすればよいですか

4

2 に答える 2

0

yii を使用する場合に複数の db 接続を使用するためのよりクールな方法:

    'db' => array(
        'class' => 'PortalDbConnection',
        'connectionString' => 'mysql:host=localhost;dbname=mydb',
        'username' => 'dev',
        'password' => '123456',
        'tablePrefix' => '',
        'emulatePrepare' => true,
        'enableParamLogging' => true,
        'enableProfiling' => true,
        'charset' => 'utf8',
    ),
    'dbx' => array(
        'connectionString' => 'mysql:host=localhost;dbname=mydb1',
        'username' => 'dev',
        'password' => '123456',
        'charset' => 'utf8',
        'tablePrefix' => '',
        'autoConnect' => false,
        'class' => 'CDbConnection', //this may be the reason you get errors! always set this
    ),

そして今、あなたのモデルのphpコード:

<?php

class DomainSlaveM extends Domain {

    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static $server_id = 1;
    public static $slave_db;

    public function getDbConnection() {
        self::$slave_db = Yii::app()->dbx;
        if (self::$slave_db instanceof CDbConnection) {
            self::$slave_db->active = false;
            $config = require(Yii::app()->getBasePath() . '/config/main.php');
//set new connection string; also, you may set the right db user and pass if needed
                $connectionString = 'mysql:host=localhost;dbname=mydb' . self::$server_id;
                self::$slave_db->connectionString = sprintf($connectionString, 'dbx');
                self::$slave_db->setActive(true);
                return self::$slave_db;
            }
            else
                throw new CDbException(Yii::t('yii', 'Active Record requires a "db" CDbConnection application component.'));
        }

    }

次のように使用します。

    public function createDomainSlaveM($model) {
//switch the db connection; $server_id gets values, from 1 to N
            DomainSlaveM::$server_id = $model->user_id;
            $model_domain_slave_m = new DomainSlaveM();
            $model_domain_slave_m->attributes = $model->attributes;
            if ($model_domain_slave_m->validate() && $model_domain_slave_m->save()) {
                //ok
            } else {
                //bad
            }
        }
于 2013-10-30T08:55:03.160 に答える