foreach循环问题中的CakePHP多个数据库连接
CakePHP multiple databases connection in foreach loop issue
我正在使用 Cake 在具有相同数据库用户配置的循环中连接多个数据库。我只是使用这种方法来即时建立不同的连接。
我只是在 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 循环中获取每个摘要 table 数据时。每次运行时,它总是只与第一个数据库保持连接。这是循环:
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()
但没有成功。
请帮忙!
调用 setSource
属性 useDbConfig
不是更改正在使用的模型的数据源的 right/best 方法。要在 运行 时间更改数据源,请调用 setDataSource,即:
foreach($this->databases as $key=> $database){
$newDbConfig = $this->dbConnect($database);
$this->Summary->setDataSource($newDbConfig['name']);
...
}
我正在使用 Cake 在具有相同数据库用户配置的循环中连接多个数据库。我只是使用这种方法来即时建立不同的连接。
我只是在 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 循环中获取每个摘要 table 数据时。每次运行时,它总是只与第一个数据库保持连接。这是循环:
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()
但没有成功。
请帮忙!
调用 setSource
属性 useDbConfig
不是更改正在使用的模型的数据源的 right/best 方法。要在 运行 时间更改数据源,请调用 setDataSource,即:
foreach($this->databases as $key=> $database){
$newDbConfig = $this->dbConnect($database);
$this->Summary->setDataSource($newDbConfig['name']);
...
}