2012-05-31 76 views
0

我正在CakePHP中建立一個可變數據庫的網站。 我這樣做是用下面的代碼:Cache-issue更改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'); 

MODEL:

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' 

這是因爲蛋糕仍然有他的緩存中的上一張表。 如果我等一會兒,然後更改頁面,它工作正常。 有關此問題的任何建議? 由於提前,

亞倫

回答

1

像你說的,該表信息被緩存。所以,你只需要刪除緩存:

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

或者,你可以暫時禁用緩存

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

謝謝,但我已經嘗試過這一點,這是行不通的。 Cache :: clear(false,'Page'); //模型是Page.php,對嗎? (頁面擴展模型...) – Aaron

+0

不,請使用我輸入的內容,它將清除每個模型的緩存(Cake 2.x)。 – jeremyharris

+0

奇怪......它不起作用,我嘗試在視圖函數和beforefilter()函數中使用代碼。是Cake 2.1。並使用App :: import('Cache');導入類... – Aaron