2010-06-08 31 views
8

मैं परियोजना CakePHP जो अलग डीबीएस से डेटा हो रही है का उपयोग करके विकसित किया है, लेकिन अगर शोध करे में से एक डेटाबेस कुछ पृष्ठों खुला नहीं है और मुझे निम्न त्रुटि दे: मॉडल moedlname के लिएCakePHP डेटाबेस नहीं मिला

डेटाबेस तालिका tablenae नहीं मिला।

.. और मेरे पास इस पृष्ठ में अन्य डेटाबेस से प्रदर्शित अन्य डेटा है जो शायद काम करता है।

मैं कैसे निर्धारित कर सकता हूं कि डेटाबेस केक का उपयोग कर ऑफ़लाइन है या नहीं और मैं इस मॉडल को फिर से डेटाबेस स्टार्टअप तक कैश फ़ाइल की तरह किसी अन्य स्थान से पढ़ सकता हूं।

+0

हमम। क्या आपके पास ऐसे बड़े डेटाबेस आउटेज हैं जो वास्तव में आवश्यक हैं? क्यूं कर? –

+0

फ़ीड डेटाबेस (स्टॉक की कीमतें डीबी) पेक्का – SMSM

उत्तर

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; 
    } 
} 
?> 
संबंधित मुद्दे