加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

CakePHP交换机数据库(使用相同的数据源)在运行中?

发布时间:2020-12-13 18:07:47 所属栏目:PHP教程 来源:网络整理
导读:我试图构建一个小功能,可以在控制器中使用,即时切换数据库,我必须只使用一个数据源. 在我的database.php上: function __construct() { $server = Configure::read('Server'); if(!empty($server['database'])) $this-local['database'] = $server['database
我试图构建一个小功能,可以在控制器中使用,即时切换数据库,我必须只使用一个数据源.

在我的database.php上:

function __construct() {

    $server = Configure::read('Server');

    if(!empty($server['database'])) $this->local['database'] = $server['database'];
    $this->default = $this->{$server['datasource']};

}

用于根据服务器配置切换数据库.它工作得很好.

我试图建立这个:

/**
 * Connects to specified database
 *
 * @param array $config Server config to use {datasource:?,database:?}
 * @return array db->config on success,false on failure
 * @access public
 */
function dbConnect($config = array()) {
    ClassRegistry::init('ConnectionManager');
    //debug($config['datasource']);
    //$dbInstance =& ConnectionManager::getInstance();
    //$dbInstance->config->{$config['datasource']}['database'] = $config['database'];

    $db =& ConnectionManager::getDataSource($config['datasource']);
    $db->disconnect();
    $db->cacheSources = false;
    $db->config['database'] = $config['database'];
    $db->config['persistent'] = false;
    debug($db->config);
    $db->connect();
    if(!$db->isConnected()) {
        $this->error('!$db->isConnected()');
        return false;
    }
    return $db->config;
}

但遗憾的是,一切似乎都有效,但我也可以使用$this-> Player-> find(‘list’)从同一个数据库中获取数据.我试过$this->播放器 – > cacheQueries = false;没有更多的成功.

使用它可以正常工作(动态创建新连接):
$newDbConfig = $this->dbConnect($serverConfig);
$this->Model->useDbConfig = $newDbConfig['name'];
$this->Model->cacheQueries = false;

用:

/**
 * Connects to specified database
 *
 * @param array $config Server config to use {datasource:?,false on failure
 * @access public
 */
function dbConnect($config = array()) {
    ClassRegistry::init('ConnectionManager');

    $nds = $config['datasource'] . '_' . $config['database'];
    $db =& ConnectionManager::getDataSource($config['datasource']);
    $db->setConfig(array('name' => $nds,'database' => $config['database'],'persistent' => false));
    if($ds = ConnectionManager::create($nds,$db->config)) return $db->config;
    return false;

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读