Powered by CodeIgniter

База данных

Работа с базой осуществляется посредством библиотек CodeIgniter. Рекомендуем пользоваться Active Record Class в силу того, что это способствует расширяемости кода./* * Метод query модели node, определяющий составляющий базового запроса для получения нод. * Благодаря префиксу "_" становится подвластен системе хуков. */ ... function _query(){ return $this->db->select('nodes.*',FALSE) // второй параметр позволяет избежать экранизации символа * ->get('nodes'); } ... function get($id){ $this->db->where('id',$id); return $this->query()->row(); } ... /* * Воздействуем на запрос ноды из компонента user через хуки. * Обратите внимание, что хук выполняется до вызова метода query, * поскольку не имеет суффикса _after. */ function user_node_query_($Node){ $CI =& get_instance(); $CI->db ->select('user.name,user.url_name,user.avatar') ->join('users','node.aid = users.id','inner'); } ...

Новые функции Active Record

Обратите внимание на созданный нами метод swop, который позволяет переключаться между цепочками условий Active Record. Он помогает избежать конфликтных ситуаций при их возникновении.$this->db->select('users.*',FALSE)->from('users')->where('id',$id); // Выстроенная цепочка выглядит так: // SELECT users.* FROM users WHERE id = "$id" // Появилась необходимость узнать количество сообщений у пользователя. $this->db->swop(); // Прошлая цепочка хранится в запасе, новая пока пустая. $pm_count = $this->db->where('uid',$id)->count_all_results('pm'); // Новая цепочка обнуляется после вызова метода count_all_results. // Возвращаемся к предыдущей цепочке и завершаем запрос. $user = $this->db->swop()->get(); // Исходная цепочка обнуляется По-умолчанию метод «count_all_results» обнуляет цепочку запроса после получения результат, поэтому мы внесли дополнительный параметр, позволяющий ее сохранить. ... function show_nodes($page = 0){ // Вызываем метод модели ноды, составляющий запрос. $this->node->query(); // Получаем количество страниц для навигации. $pager = $this->pager($page,$this->db->count_all_results('nodes',FALSE)); // При указании FALSE вторым аргументом мы сохраняем исходную цепочку запроса $nodes = $this->db->get('nodes',$pager['start'],$pager['limit'])->result(); ... }
Совет: Рекомендуем использовать Active Record, что позволит сократить расходы при переходе на другие типы баз данных.