我有一个应用程序和数据库(都具有相同的结构)。我需要设置Yii连接到specyfic数据库。例如:
http://mylink.com/index.php/ProjectName/Controller/Action
但我也有一个独立的应用程序的一部分,它连接到一个“全局”数据库,网址应该是这样的:
http://mylink.com/index.php/Controller/Action
我不知道该怎么做。更重要的是,如果我在一个项目中,Yii创建的所有链接也应该包含项目名称
答案 0 :(得分:0)
您想使用Modules
和Multiples 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
。
<强> This answer has a detailed way to connect to different DBs dynamically. 强>
答案 1 :(得分:0)
使用模块是您的最佳选择。在config / main.php中声明几个db连接(例如'db'和'db_custom')。 然后有两种方式:
您可以在模块中重置数据库组件:
class MyModule extends CWebModule { public function init() { Yii::app()->setComponent('db',Yii::app()->getComponent('db_custom')); } }
另一种方法是将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;
所以你改变主数据库组件,你的模块将使用另一个数据库。