缓存问题动态更改 Cakephp 数据库设置



我正在用可变数据库在Cakephp中构建一个网站。我使用以下代码执行此操作:

控制器:

$db_host = $DB_SET['Project']['db_host']; //From other database
$db_user = $DB_SET['Project']['db_user'];
$db_pass = $DB_SET['Project']['db_pass'];
$db_database = $DB_SET['Project']['db_database'];
ConnectionManager::create("client_db", array(
    'datasource' => 'Database/Mysql',
    'driver' => 'mysql',
    'persistent' => false,
    'host' => $db_host,
    'login' => $db_user,
    'password' => $db_pass,
    'database' => $db_database,
    'prefix' => '',
    'encoding' => 'UTF8',
    'port' => '',
));
$DB_LINE = $this->Page->findPage('3');

型:

class Page extends Model {
    public $useDbConfig = 'client_db';
    function findPage($pagenr) { 
        $page = $this->find('first', array(
            'conditions' => array (
                'Page.id' => $pagenr)
        ));
    return $page;
    }
}

现在我还需要动态更改数据库中的表。我这样做使用(控制器):

$tbl_current = array('tbl_cheques', 'tbl_wishes');
$this->Modelname->useTable  = $tbl_current[$pageid]; //Getting the pageID from an url parameter.

一切正常,只有当我在单击另一个页面之前不等待一段时间时,我才会收到此错误:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Page.fqlkdf' in 'field list'

这是因为 Cake 在他的缓存中仍然有以前的表。如果我等一分钟,然后我更改页面,它可以正常工作。对这个问题有什么建议吗?提前感谢,

阿龙

就像你说的,表信息是缓存的。因此,您只需要删除该缓存:

Cache::clear(false, '_cake_model_');

或者,您可以暂时禁用缓存

 Configure::write('Cache.disable', false);

最新更新