Соединение нескольких баз данных CakePHP в цикле foreach

Я использую 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. Каждый раз, когда он запускается, он всегда поддерживает связь только с 1-ыми базами данных. Вот цикл:

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() но безуспешно

Пожалуйста помоги!

1

Решение

Вызовите setSource

Недвижимость useDbConfig не правильный / лучший способ изменить источник данных используемой модели. Чтобы изменить источник данных во время выполнения, позвоните setDataSource, т.е .:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]