0

Yii-1.1.13 を使用しています。私は2つのデータベースを持っていprotected/config/main.phpます。以下のように両方を設定しました。

  'db2'=>array(
   'class'   => 'CDbConnection' ,
   'connectionString' => 'pgsql:host=localhost;port=5432;dbname=database2',
   'emulatePrepare' => true,
   'username' => 'zzzzz',
   'password' => 'zzzzz',
   'charset' => 'utf8',
  ),

  'db'=>array(
   'connectionString' => 'pgsql:host=localhost;port=5432;dbname=database1',
   'emulatePrepare' => true,
   'username' => 'xxxxx',
   'password' => 'xxxxx',
   'charset' => 'utf8',
  ),

Yii CGridViewでカウントを表示するために以下のコードを使用していますが、正常に動作しています。これにより、 database1が接続されます。

モデル

 <?     
public function search()
{       
 $criteria=new CDbCriteria;
 $criteria->select='std_id ,count(*) as counts';
 $criteria->condition = "sdate between '$this->startdate' and '$this->enddate'";
 $criteria->group ='std_id';
 return new CActiveDataProvider($this, array( 
    'criteria'=>$criteria,      
    'pagination' => array( 'pageSize' => 30 ),
    ));                         
}       
?>

見る

<?php $this->widget('zii.widgets.grid.CGridView', array(
   'id'=>'std_id-grid', 
   'dataProvider'=>$model->search(),
   'columns'=>array(    
    'std_id',                   
    'counts',                   
    ),                          

   )); ?>               

別のモデルでは、database2 に接続するユーザーの詳細を表示するコードを以下に示します。それは機能していません。何が問題なのですか。私は2つの異なる方法で試しました。以下の Type-1 および Type-2 を参照してください。

このリンクを参照して、Yii で複数のデータベースを接続しました。

モデル

    <?

         class Usr extends SecDB
    {
    ...
    ..
             public function getDbConnection()
            {
                return self::getSecDbConnection();
        //We need to override this method in the models representing the 
    //advertising database to return the second DB connection.
        }


    public function search()
    {

     // Type -1 Not working
     /*$row = Yii::app()->db2->createCommand(array(
        'select' => array('id', 'name', 'date_created'),
        'from' => 'accounts',
        'where' => "type = 'USERS'",
        ))->queryAll();

     return new CActiveDataProvider($this, array(
        'criteria'=>$row,
        ));
    */

     // Type -2 Not working

     $criteria=new CDbCriteria;
     $criteria->select='id,name,date_created';
     $criteria->condition = "type = 'USERS'";
     return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,

  ));
    }

 ?>
}

見る

<?php $this->widget('zii.widgets.grid.CGridView', array(
   'id'=>'users-grid',
   'dataProvider'=>$model->search(),
   'columns'=>array(
    'id',
    'name',
    'date_created'
    ),

   )); ?>

データベース接続を上書きしました。しかし、それは機能していません。ブラウザには何も来ていません。


私はSecDB.phpprotected/components/SecDB.phpにあります

<?php

class SecDB extends CActiveRecord {
    private static $db2 = null;

    public static function getSecDbConnection()
    {
        if (self::$db2 !== null){
            return self::$db2;
        }else
 {      
            self::$dbcc = Yii::app()->db2;
            if (self::$db2 instanceof CDbConnection)
            {
                self::$db2->setActive(true);
                return self::$db2;
            }
            else
                throw new CDbException(Yii::t('yii','Active Record requires a "db2" CDbConnection application component.'));
        }
    }

}

?>
4

1 に答える 1