问题:YII单DB方式已经满足不了我们的需求,急切需要对YII进行扩展设计,支持多DB方式
解决方法:
1、在protected/components目录下新建Ar.php脚本文件。
- <?php
- class
Ar extends CActiveRecord - {
-
static $database = array(); -
public $dbname = 'db'; -
public function __construct($scenario='insert', $dbname = '') -
{ -
if (!emptyempty($dbname)) -
$this->dbname = $dbname; -
-
parent::__construct($scenario); -
} -
-
public function getDbConnection() -
{ -
$dbname = $this->dbname; -
if (self::$database[$dbname]!==null) -
{ -
return self::$database[$dbname]; -
} -
else -
{ -
if ($this->dbname == 'db') -
{ -
self::$database[$dbname] = Yii::app()->getDb(); -
} -
else -
{ -
self::$database[$dbname] = Yii::app()->$dbname; -
} -
-
if(self::$database[$dbname] instanceof CDbConnection) -
{ -
self::$database[$dbname]->setActive(true); -
return self::$database[$dbname]; -
} -
else -
throw new CDbException(Yii::t('yii','Active Record requires a "db" CDbConnection application component.')); -
} -
} - }
2、数据库配置
- <?php
- $config
= array( -
'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..', -
'name'=>'My Web Application', -
//...此处代码已省略,去掉components里面的db文件配置 -
); -
- $database
= @include_once dirname(__FILE__).'/database.php'; - if(!emptyempty($database))
- {
-
$config['components'] = @array_merge($config['components'], $database); - }
- return
$config;
- <?php
- return
array( -
-
'db'=>array( -
'connectionString' => 'dblib:host=test;dbname=test', -
'emulatePrepare' => false, -
'username' => 'user', -
'password' => 'pass', -
'charset' => 'gbk', -
), -
-
-
-
-
'test1'=>array( -
'connectionString' => 'dblib:host=testHostname;dbname=test1', -
'emulatePrepare' => false, -
'username' => 'user', -
'password' => 'pass', -
'charset' => 'gbk', -
),);
- <?php
- class
test extends Ar - {
-
//设置处理所在数据库,不设置为默认DB -
$dbname = 'test1'; -
//...省略代码若干行 - }