База данных CakePHP не найдена - PullRequest
8 голосов
/ 08 июня 2010

У меня есть проект, разработанный с использованием cakephp, который получает данные из разных БД, но если одна из этих баз данных не открывается, появляются некоторые страницы и выдается следующая ошибка:

Таблицы таблиц базы данных для модели moedlname не найдены.

.. и у меня есть на этой странице другие данные, отображаемые из другой базы данных, которые, вероятно, работают.

как я могу определить, находится ли база данных в автономном режиме, используя торт, и я могу сделать так, чтобы эта модель считывалась из другого места, например, из файла кэша, до повторного запуска базы данных.

1 Ответ

2 голосов
/ 09 июня 2010

Возможно, лучшим подходом является кэширование результатов и чтение из кеша, при этом ударив по БД только при необходимости ...

<?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;
    }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...