У меня проблема с этим решением. Позвольте мне сначала показать вам мой код, чтобы лучше понять, что я собираюсь сказать 🙂
Я получаю код из этой темы -> Как динамически использовать несколько баз данных для одной модели в CakePHP
Мой AppModel.php
public function setDatabase($database, $prefix = 'b2b')
{
$nds = $prefix . '_' . $database;
$db = ConnectionManager::getDataSource($prefix);
$db->setConfig(array(
'name' => $nds,
'database' => $nds,
'persistent' => false
));
if ( $ds = ConnectionManager::create($nds, $db->config) ) {
$this->useDbConfig = $nds;
$this->cacheQueries = false;
return true;
}
return false;
}
В файле database.php у меня есть:
public $b2b = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'b2b',
'password' => 'password',
'database' => 'b2b_app',
'prefix' => '',
'encoding' => 'utf8',
);
В контроллере я делаю что-то вроде этого:
$this->loadModel('User');
if($this->isSubdomainSet()) {
$this->User->setDatabase($this->getSubdomain());
}
$this->loadModel('Package');
if($this->isSubdomainSet()) {
$this->Package->setDatabase($this->getSubdomain());
$packages = $this->Package->find('all');
}
Проблема в том, что вторая модель (Package) получает данные из базы данных по умолчанию, а не из базы b2b. В чем проблема? Я не знаю, почему метод setDatabase не изменяет базу данных во второй раз.
База данных не изменилась, потому что вы дважды меняли на одну и ту же
$this->User->setDatabase($this->getSubdomain());
а позже вы делаете
$this->Package->setDatabase($this->getSubdomain());
Так что это не может быть другая база данных. Я думаю getSubdomain()
возвратит одинаково оба раза
Других решений пока нет …