0

dbxアプリの実行中に、必要に応じて接続を編集する必要があります。

2 db 接続設定を定義しました。

db中央データベース用です

dbx他のスレーブデータベース用です(私のアプリにはユーザーごとにスレーブデータベースがあります)

ユーザーごとにdbx、独自のユーザー名とパスワードがあり、db テーブルに保存されます。

'db' => array(
            'connectionString' => 'mysql:host=localhost;dbname=dvc',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ),
        'dbx' => array(
            'connectionString' => 'mysql:host=localhost;dbname=dvc2',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
            'tablePrefix' => '',
            'class' => 'CDbConnection'          // DO NOT FORGET THIS!
        ),
4

2 に答える 2

1

構成で構成しない可能性がdbxあり、ユーザーがログインした後、コードで dbx を使用する前に、必要なパラメーターを使用してコンポーネントを作成します。あなたはそれを行うことができます(ここで説明します):

Yii::app()->createComponent('dbx', array(
        'connectionString' => 'mysql:host=localhost;dbname=dvc2',
        'username' => <user db login>,
        'password' => <user db pass>,
        'charset' => 'utf8',
        'tablePrefix' => '',
        'class' => 'CDbConnection'          // DO NOT FORGET THIS!
    ))

既存のコンポーネントを削除するにはYii::app()->createComponent('dbx', null)、他のパラメーターを使用してこのコンポーネントを作成してください。

于 2013-10-23T09:07:22.940 に答える
0

したがって、テスト済みのソリューションは次のとおりです。

<?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) {
            $config = require(Yii::app()->getBasePath() . '/config/location/setting.php');
            $connectionString = 'mysql:host=localhost;dbname=irdb' . 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.'));
    }

}

コードは次のとおりです。

    DomainSlaveM::$server_id = 1;
    $model_domain_slave_m = DomainSlaveM::model()->findByAttributes(array('id' => 1));
    if ($model_domain_slave_m) {
        $model_domain_slave_m->updated = time();
        if ($model_domain_slave_m->validate() && $model_domain_slave_m->save()) {

        }
    }

元の記事は次の場所にあります:ここをクリック

于 2013-10-23T09:31:51.827 に答える