YII多DB

问题:YII单DB方式已经满足不了我们的需求,急切需要对YII进行扩展设计,支持多DB方式

 

解决方法

1、在protected/components目录下新建Ar.php脚本文件。

[php]  view plain copy
  1. <?php  
  2. class Ar extends CActiveRecord  
  3.  
  4.     static $database array();  
  5.     public $dbname  'db' 
  6.     public function __construct($scenario='insert'$dbname '' 
  7.      
  8.         if (!emptyempty($dbname))  
  9.             $this->dbname    $dbname 
  10.               
  11.         parent::__construct($scenario);  
  12.      
  13.       
  14.     public function getDbConnection()  
  15.      
  16.         $dbname $this->dbname;  
  17.         if (self::$database[$dbname]!==null)  
  18.          
  19.             return self::$database[$dbname];  
  20.          
  21.         else  
  22.          
  23.             if ($this->dbname == 'db' 
  24.              
  25.                 self::$database[$dbnameYii::app()->getDb();  
  26.              
  27.             else   
  28.              
  29.                 self::$database[$dbnameYii::app()->$dbname 
  30.              
  31.                   
  32.             if(self::$database[$dbnameinstanceof CDbConnection)  
  33.              
  34.                 self::$database[$dbname]->setActive(true);  
  35.                 return self::$database[$dbname];  
  36.              
  37.             else  
  38.                 throw new CDbException(Yii::t('yii','Active Record requires "db" CDbConnection application component.'));  
  39.          
  40.      
  41.  

2、数据库配置

     为了方便与清晰我们的数据库配置文件,我们将数据库配置文件与main.php文件进行分离。

 

     (1)首先我们看看main.php文件的配置,代码如下

 

[php]  view plain copy
  1. <?php  
  2. $config array 
  3.     'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..' 
  4.     'name'=>'My Web Application' 
  5.          //...此处代码已省略,去掉components里面的db文件配置  
  6.     );  
  7.   
  8. $database   @include_once dirname(__FILE__).'/database.php' 
  9. if(!emptyempty($database))  
  10.  
  11.     $config['components'@array_merge($config['components'], $database);  
  12.  
  13. return $config 

    (2)在配置文件目录(protected/config),新建database.php脚本文件,代码如下

 

[c-sharp]  view plain copy
  1. <?php  
  2. return array(  
  3.       
  4.     'db'=>array(  
  5.             'connectionString' => 'dblib:host=test;dbname=test' 
  6.             'emulatePrepare' => false 
  7.             'username' => 'user' 
  8.             'password' => 'pass' 
  9.             'charset' => 'gbk' 
  10.     ),  
  11.         
  12.       
  13.           
  14.       
  15.     'test1'=>array(  
  16.             'connectionString' => 'dblib:host=testHostname;dbname=test1' 
  17.             'emulatePrepare' => false 
  18.             'username' => 'user' 
  19.             'password' => 'pass' 
  20.             'charset' => 'gbk' 
  21.         ),);  

 

    (3)在使用的时候,我们需要对model文件进行简单的修改。

           a、将继承文件类换成Ar

           b、给model添加属性$dbname设置所在数据库配置文件名称(不设置则为默认DB)

           实例代码如下:

 

[php]  view plain copy
  1. <?php  
  2. class test extends Ar  
  3.  
  4.     //设置处理所在数据库,不设置为默认DB  
  5.     $dbname 'test1' 
  6.     //...省略代码若干行  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值