2010-06-08 19 views
8

Ho progetto sviluppato utilizzando CakePHP che sta ottenendo i dati da diversi DB, ma se uno di tesi di database alcune pagine si apre e mi danno il seguente errore: tavolobanca dati cakephp non trovato

Database tablenae per il modello moedlname Non è stato trovato.

..e ho in questa pagina Altri dati visualizzati dal altri database che funzionano probabilmente.

come posso determinare se il database non è in linea utilizzando la torta e posso far leggere questo modello da un altro posto come un file di cache fino all'avvio del database di nuovo.

+0

Hmmm. Avete interruzioni del database così massicce che questo è veramente necessario? Perché? –

+0

database di feed (prezzi stock DB) Pekka – SMSM

risposta

2

Forse un approccio migliore è quello di memorizzare i risultati e leggere dalla cache, solo colpire il DB quando necessario ...

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

Il problema di questo è assume la connessione del modello e del database sono disponibili per la tempo in cui la cache non esiste (o è scaduta) e, in caso contrario, avresti comunque gli stessi errori, ma la frequenza verrebbe sicuramente ridotta.

Penso che testare se il DB sia disponibile richiederebbe alcuni trucchi del codice personalizzati poiché il metodo core di connessione presuppone il successo e fallisce pesantemente quando non è disponibile. Probabilmente farei un componente con metodi di connessione PHP standard per controllare se dovresti provare a caricare un modello.

<?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; 
    } 
} 
?>