我正在用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中仍然有前一张表。如果我等一会儿,然后我改变页面,它工作正常。对这个问题有什么建议吗?提前感谢,
阿隆
正如您所说,表信息是缓存的。因此,您只需删除该缓存:
Cache::clear(false, '_cake_model_');
或者,您可以暂时禁用缓存
Configure::write('Cache.disable', false);