/** * Версия load_object_list работающая с кешем * * @param boolean|string $key поле выступающее в качестве ключа для ассоциативного массива результата * @param int $cache_time Время жизни кэша * * @return array ассоциативный или обычный массив результатов */ public function load_object_list_cache($key = false, $cache_time = 86400) { $cache = new joosCache(); $cache_key = md5($this->_sql); if (($value = $cache->get($cache_key)) === NULL) { if (!($cur = $this->query())) { return null; } $value = array(); while ($row = mysqli_fetch_object($cur)) { if ($key) { $value[$row->{$key}] = $row; } else { $value[] = $row; } } $this->free_result(); $cache->set($cache_key, $value, $cache_time); } return $value; }
/** * Кэширующая обертка над фунцией find * * @param array $params Параметры к методу find * @param int $cache_time Время кэширования * @return boolean Найденный объект * * @todo проверить обоснованность использования $find_result */ public function find_cache(array $params = array('select' => '*'), $cache_time = 86400) { $cache = joosCache::instance(); $key = md5($this->get_find_query_from_params($params)); if (($value = $cache->get($key)) === NULL) { $find_result = $this->find($params); //в кэше надо хранить не только значение, но еще и результат поиска $cache->set($key, array($find_result, $this->to_cache()), $cache_time); } else { //достаем объект и мэппим его поля на текущий объект list($find_result, $obj) = $value; foreach ($obj as $k => $v) { $this->{$k} = $v; } } return $find_result; }