0

アプリケーションとデータベースがあります (すべて同じ構造です)。特定のデータベースに接続するように Yii を設定する必要があります。例:

http://mylink.com/index.php/ProjectName/Controller/Action

しかし、独立したアプリケーションの一部もあり、1 つの「グローバル」データベースに接続しています。URL は次のようになります。

http://mylink.com/index.php/Controller/Action

これを行う方法がわかりません。さらに、単一のプロジェクト内で、Yii が作成するすべてのリンクにプロジェクト名も含める必要があるとします。

4

2 に答える 2

0

と を使用ModulesMultiples databasesます。

使用modulesするには、フォルダ/modulesの下に Yii の同様の構造を作成する必要があります。例:

ProjectName/
   ProjectName.php            
   components/                
      views/                  
   controllers/               
      DefaultController.php   
   extensions/                
   models/                    
   views/                     
      layouts/                
      default/                
         index.php            

参考:モジュールの作り方。

CActiveRecordクラスをオーバーライドして、データベース接続ごとにクラスを作成するソリューションが気に入っています。次に例を示します。

class CActiveRecord_Db1 extends CActiveRecord{
    public function getDbConnection(){
    ....
    }
}

モデルでは、特定のCActiveRecord.

この回答には、さまざまな DB に動的に接続するための詳細な方法があります。

于 2013-06-19T07:12:32.563 に答える
0

モジュールを使用することは、あなたにとって完璧な方法です。config/main.php でいくつかの db 接続を宣言します (たとえば、'db' と 'db_custom')。次に、2 つの方法があります。

  1. モジュールでdbコンポーネントをリセットできます:

    クラス MyModule は CWebModule を拡張します
    {
        パブリック関数 init()
        {
             Yii::app()->setComponent('db',Yii::app()->getComponent('db_custom'));
        }
     }
     
  2. もう 1 つの方法は、構成をモジュールの基本構成とカスタム構成 (config/main.php および config/mymodule.php) に分離することです。config/mymodule.php に次のように記述します。

    $aMainConfig = require(dirname(__FILE__).'/main.php');
    $aMainConfig['components']['db'] = $aMainConfig['components']['db_custom'];
    $aConf を返します。
    

したがって、メインの db コンポーネントを変更すると、モジュールは別のデータベースを使用します。

于 2013-06-26T21:05:17.777 に答える