CakePHP中的一个模型动态生成多个数据库

时间:2015-04-23 14:47:39

标签: php mysql cakephp model multiple-databases

我对此解决方案有疑问。让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不会第二次更改数据库。

1 个答案:

答案 0 :(得分:0)

数据库未更改,因为您更改为相同的两次

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

以后再做

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

所以它不能是另一个数据库。我认为getSubdomain()两次都会返回相同的