CakePHP在CakePHP 2.2.5控制器中切换数据库连接

时间:2013-01-28 19:08:28

标签: php database cakephp

我正在尝试从控制器中的两个不同数据库中获取数据

应用/控制器/ UsersController.php

我的数据库连接在 database.php

中声明
$default = array(
    ...
    'database' => 'test'
    ...
    );
$test = array(
    ...
    'database' => 'test1'
    ...
    );

并在我的display()操作中:

public function display() {
    $this->set('defaultUsers', $this->User->find('all'));
    $this->User->schemaName = 'test1';
    $this->User->cacheQueries = false;
    $this->set('testUsers', $this->User->find('all'));
}

然而,这将允许我成功地从两个不同的来源获取数据 问题是这两个数据库必须具有相同的密码,否则它将无法工作。

我已尝试过此处和其他网站发现的其他解决方案。 像:

  • 更改$this->User->useDbConfig = 'test'$this->User->cacheQueries = false仍会为我提供相同的数据集;

  • 使用ConnectionManager::getDataSource()setConfig()create()drop()setDataSource()等。这些都不起作用,有些甚至不存在更多。

任何帮助将不胜感激! 因为我需要为两个类似的应用程序提供相同的代码库a.k.a两个数据库。

谢谢!

1 个答案:

答案 0 :(得分:4)

您可能需要使用'setDataSource()'来切换数据源/连接,因为这将重置模型上的'缓存'模式等;

public function display() {
    $this->set('defaultUsers', $this->User->find('all'));
    $this->User->setDataSource('test1');
    $this->set('testUsers', $this->User->find('all'));
}

如果您需要在整个应用程序中访问两个数据库中的数据,另一个选项是创建两个用户模型,一个用'test'作为数据源,另一个用'test1'作为数据源。这样您就不必一直切换数据源

示例:

class TestUser extends AppModel {
    public $useTable = 'users'; // name of the database table 
    public $useDbConfig = 'test1';  // name of the database configuration in database.php
}

进一步说明: '$ test'database-config是预先配置的数据库连接,用于运行CakePHP单元测试。您可以考虑创建自己的数据库连接名称