0

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

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

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

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

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

4

2 回答 2

0

使用模块是您的完美方式。在 config/main.php 中声明几个 db 连接(例如 'db' 和 'db_custom')。那么有两种方法:

  1. 您可以在模块中重置 db 组件:

    MyModule 类扩展 CWebModule
    {
        公共函数初始化()
        {
             Yii::app()->setComponent('db',Yii::app()->getComponent('db_custom'));
        }
     }
     
  2. 另一种方法是将配置分为模块的基本配置和自定义配置(config/main.php 和 config/mymodule.php)。在 config/mymodule.php 中写:

    $aMainConfig = require(dirname(__FILE__).'/main.php');
    $aMainConfig['components']['db'] = $aMainConfig['components']['db_custom'];
    返回$aConf;
    

所以你改变了主数据库组件,你的模块将使用另一个数据库。

于 2013-06-26T21:05:17.777 回答
0

您想使用ModulesMultiples databases

为了使用modules你必须在文件夹下创建/modules与 Yii 类似的结构,例如:

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

参考:如何创建模块。

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

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

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

这个答案有一个详细的方法来动态连接到不同的数据库。

于 2013-06-19T07:12:32.563 回答