Организация запросов к БД

Получение данных из системы – одна из главных задач объекта Contenido::Keeper (или плагинных plugin::Keeper). Для быстрого доступа к объекту Keeper в Contenido::Globals создана глобальная переменная $keeper, доступная в любой компоненте. Можно напрямую обратиться в любом объекте при указании:

use Contenido::Globals;

Для получения необходимой выборки объектов, усеченных объектов, списков идентификаторов, произвольного набора полей или результата операции COUNT достаточно вызвать один из трех методов: get_documents, get_sections, get_links, передав им хеш параметров, который описывает, чего вы хотите получить. Структура вызова этих методов унифицирована и в итоге приводит к вызову get_items, так что можно ограничиться последним. Выбор того или иного метода – вопрос исключительно из области програбилити, повышающий читабельность кода.

get_documents

Производит выборку по прототипу Contenido::Document. Вызванный без параметров пытается выбрать и обернуть в объекты все содержимое таблицы documents. Для выборки из любой другой таблицы необходимо использовать параметры class или table. Подробности – ниже.

get_sections

То же самое, но по таблице sections. Данный метод уместно использовать именно для выбора секций. Во-первых, при чтении кода сразу становится понятно, что выбираются не документы, а секции. Во-вторых, только секции в системе не имеют кастомизации таблиц, так что get_sections, вызванный без указания класса, совсем не дикость, в отличие от get_documents или get_links.

get_links

То же самое, что get_documents, но при вызове без указания класса производит выборку из таблицы links.

get_items

Прототип вызова:

$keeper->get_items($proto, %opts);

$proto – один из классов, наследуемых от Contenido::Object, либо сам Contenido::Object.
%opts – список параметров для организации выборки из базы

get_objects

Напрямую апеллирует к get_items, передавая в качестве прототипа Contenido::Object. Может быть использован вместо get_documents.

_get_users

Метод для получения системных пользователей (тех, которые имеют доступ к интерфейсу админки) из таблицы users.

get_document_by_id, get_section_by_id, get_link_by_id, get_user_by_id

Прокси-методы, осуществляющие выборку единственного элемента, как нетрудно догадаться, по его id. Возвращают объект в единственном экземпляре. Пример вызова:

$keeper->get_section_by_id(1, class => 'Contenido::Section' );

get_object_by_id

Умный метод. Сначала ищет объект в $request->{_cache_}, потом в memcached (если включена поддержка, конечно), и только потом уже идёт в базу. Полученные из базы данные складывает в $request и в memcached.

Напишите нам

Управление типом возвращаемого значения в get_documents