如何动态更改数据库连接

时间:2013-03-11 10:03:53

标签: model schema database-connection symfony-1.4

我为我的项目使用了两个db。在配置中。 yml文件

all:
  master:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:host=localhost;dbname=livetloc'
      username: root
       password: console
client:
class: sfDoctrineDatabase
param:
  dsn: 'mysql:host=localhost;dbname=testloc'
  username: root
  password: console

然后我生成了模式和模型。现在我需要动态更改数据库连接。如果我在我的项目中编写新代码,我需要在testloc db上测试它。之后我会将其更改为liveloc db。该项目由四名成员使用。我正在为它添加新功能,四个成员同时使用该项目,但我使用“testloc”db。其他人正在使用“Liveloc”db。在单个环境中为特定登录特定用户更改数据库的解决方案是什么?

1 个答案:

答案 0 :(得分:0)

我在之前的项目中有这种需求,这就是我解决它的方法:

在您的控制器中:

// we get the params in your databases.yml file for your data source "client"
$dbParams = sfContext::getInstance()->getDatabaseManager()->getDatabase('client');

$paramsArray = array(
    $dbParams->getParameter('dsn'), 
    $dbParams->getParameter('username'),
    $dbParams->getParameter('password'),
    'testloc'
);

// setting "false" avoids this new connection to replace your default one
$newConnection = Doctrine_Manager::getInstance()->openConnection($params, 'name_of_connection', false);

$query = "SELECT * FROM table";
$result = $newConnection->fetchAll($query); 

这不是很酷,因为它使用了symfony上下文但是这样做了;)。在测试环境中,我认为这很好。