2010-06-08 104 views
8

我有項目使用從不同的DB中獲取數據CakePHP的發展,但如果論文的一個數據庫中的某些網頁無法打開,給我下面的錯誤:CakePHP的數據庫中找不到

數據庫表tablenae的模型moedlname沒找到。

..我在這個頁面中顯示其他數據顯示從其他數據庫可能工作。

我怎麼能確定數據庫是否使用蛋糕離線,我可以使這個模型從另一個地方像緩存文件讀取,直到數據庫再次啓動。

+0

嗯。你是否有如此大規模的數據庫中斷,這是非常必要的?爲什麼? – 2010-06-08 16:36:20

+0

飼料數據庫(股票價格數據庫)Pekka – SMSM 2010-06-08 16:38:43

回答

2

也許是更好的方法是緩存結果,並從緩存中讀取,只有在需要的時候打的DB ...

<?php 
$cacheKey = 'myCacheNumber1'; 
if (($data = Cache::read($cacheKey)) === false) { 
    $data = $this->Model->find('all'); 
    if ($data) { 
     Cache::write($cacheKey, $data); 
    } 
} 
?> 

的問題,這是它假定模型和數據庫連接可用於緩存不存在(或已過期)的時間,如果不存在,您仍會得到相同的錯誤,但頻率肯定會降低。

我認爲要測試數據庫是否可用,將需要一些自定義代碼欺騙,因爲連接的核心核心方法假定成功並在不可用時大量失敗。我可能會用標準的PHP連接方法創建一個組件來控制是否應該嘗試加載模型。

<?php 
$cacheKey = 'myCacheNumber1'; 
if (($data = Cache::read($cacheKey)) === false) { 
    if ($this->DbTest->check('hostname','username','password')) { 
     $data = $this->Model->find('all'); 
     if ($data) { 
      Cache::write($cacheKey, $data); 
     } 
    } 
} 
?> 
<?php 
// app/controllers/components/db_test.php 
class DbTestComponent extends Object { 
    function check($hostname,$username,$password) { 
     $result = true; 
     $link = @mysql_connect($hostname,$username,$password); 
     if (!$link) { 
      $result = false; 
     } 
     @mysql_close($link); 
     return $result; 
    } 
} 
?>