我对此解决方案有疑问。让mi首先向你展示我的代码,以便更好地理解我要说的内容:)
我从这个主题获得了代码 - > How to use multiple databases dynamically for one model in 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不会第二次更改数据库。
答案 0 :(得分:0)
数据库未更改,因为您更改为相同的两次
$this->User->setDatabase($this->getSubdomain());
以后再做
$this->Package->setDatabase($this->getSubdomain());
所以它不能是另一个数据库。我认为getSubdomain()
两次都会返回相同的