我正在尝试从控制器中的两个不同数据库中获取数据
应用/控制器/ 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两个数据库。
谢谢!
答案 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单元测试。您可以考虑创建自己的数据库连接名称