Несколько баз данных динамически для одной модели в CakeStack Overflow

У меня проблема с этим решением. Позвольте мне сначала показать вам мой код, чтобы лучше понять, что я собираюсь сказать 🙂

Я получаю код из этой темы -> Как динамически использовать несколько баз данных для одной модели в 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 не изменяет базу данных во второй раз.

1

Решение

База данных не изменилась, потому что вы дважды меняли на одну и ту же

$this->User->setDatabase($this->getSubdomain());

а позже вы делаете

$this->Package->setDatabase($this->getSubdomain());

Так что это не может быть другая база данных. Я думаю getSubdomain() возвратит одинаково оба раза

0

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

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

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