5

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

应用程序/控制器/用户控制器.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()and setConfig(), create(), drop(),setDataSource()等。这些都不起作用,有些甚至不再存在。

任何帮助将不胜感激!因为我需要为两个类似的应用程序(也就是两个数据库)使用相同的代码库。

谢谢!

4

1 回答 1

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' 数据库配置是用于运行 CakePHP 单元测试的预配置数据库连接。您可以考虑创建自己的数据库连接名称

于 2013-01-28T19:24:10.617 回答