【问题标题】:CakePHP multiple databases connection in foreach loop issueCakePHP foreach循环中的多个数据库连接问题
【发布时间】:2015-08-24 08:07:04
【问题描述】:

我正在使用 Cake 连接多个具有相同数据库用户配置的循环中的数据库。我只是使用这种方法即时建立不同的连接。 https://stackoverflow.com/a/6058764/1668476

我只是在 AppController 函数中使用它,然后在我的所有控制器中使用 这是动态连接数据库的功能:

//Used for connecting different databases on the fly
function dbConnect($database, $dataSource = 'default', $prefix = 'mycake_') {
        ClassRegistry::init('ConnectionManager');
        $database = $prefix.$database;
        $nds = $dataSource . '_' . $database;
        $db = ConnectionManager::getDataSource($dataSource);
        $db->setConfig(array('name' => $nds, 'database' => $database, 'persistent' => false));
        if($ds = ConnectionManager::create($nds, $db->config)) return $db->config;
        return false;
    }

然后在每个控制器中只使用useDbConfig 就像:

$newDbConfig = $this->dbConnect($serverConfig); $this->Summary->useDbConfig = $newDbConfig['name'];

问题: 问题是当我尝试在 foreach 循环中获取每个汇总表数据时。每次运行时,它始终只与第一个数据库保持连接。这是循环:

foreach($this->databases as $key=> $database){
      $newDbConfig = $this->dbConnect($database);
      $this->Summary->useDbConfig = $newDbConfig['name'];
      $this->Summary->cacheQueries = false;
      $summary = $this->Summary->findAllByPeriod('1');
      debug(count($summary));
}

我尝试使用clearCache()connectionManager:drop() 但没有成功。

请帮忙!

【问题讨论】:

    标签: php mysql cakephp database-connection multiple-databases


    【解决方案1】:

    调用 setSource

    useDbConfig 属性不是更改使用中模型的数据源的正确/最佳方式。要在运行时更改数据源,请调用setDataSource,即:

    foreach($this->databases as $key=> $database){
          $newDbConfig = $this->dbConnect($database);
          $this->Summary->setDataSource($newDbConfig['name']);
          ...
    }
    

    【讨论】:

    • 哪个性能最好? useDbConfigsetDataSource ?
    • 实际上我正在考虑在我的控制器中彻底改变它。
    猜你喜欢
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多