Yii选择数据库取决于参数

时间:2013-06-19 06:35:20

标签: php yii

我有一个应用程序和数据库(都具有相同的结构)。我需要设置Yii连接到specyfic数据库。例如:

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

但我也有一个独立的应用程序的一部分,它连接到一个“全局”数据库,网址应该是这样的:

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

我不知道该怎么做。更重要的是,如果我在一个项目中,Yii创建的所有链接也应该包含项目名称

2 个答案:

答案 0 :(得分:0)

您想使用ModulesMultiples databases

要使用modules,您必须在文件夹/modules下创建类似Yii的结构,例如:

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

参考:How to create modules.

我喜欢覆盖类CActiveRecord并为每个数据库连接创建一个类的解决方案,例如:

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

在您的模型上,您可以扩展特定的CActiveRecord

<强> This answer has a detailed way to connect to different DBs dynamically.

答案 1 :(得分:0)

使用模块是您的最佳选择。在config / main.php中声明几个db连接(例如'db'和'db_custom')。 然后有两种方式:

  1. 您可以在模块中重置数据库组件:

    class MyModule extends CWebModule
    {
        public function init()
        {
             Yii::app()->setComponent('db',Yii::app()->getComponent('db_custom'));
        }
     }
     
  2. 另一种方法是将config分为基本和自定义配置模块(config / main.php和config / mymodule.php)。在config / mymodule.php中写:

    $aMainConfig = require(dirname(__FILE__).'/main.php');
    $aMainConfig['components']['db'] = $aMainConfig['components']['db_custom'];
    return $aConf;
    
  3. 所以你改变主数据库组件,你的模块将使用另一个数据库。