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.php
protected/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.'));
}
}
}
?>