Инструменты пользователя

Инструменты сайта


limb3_2007_4:ru:packages:active_record:lazy_attributes

Отложенная загрузка некоторых атрибутов. Lazy Attributes

Иногда принимать все поля из таблицы базы данных - это непозволительная роскошь. Например, у нас есть объекты документы (Document), которые в себе содержат поле контент (content), аннотацию, заголовок и т.д. Если нам на определенной странице сайта необходимо показать ссылки на 30 последних документов вместе с аннотацией, тогда зачем нам нужно выбирать также и все поля content? Ведь это приведет к излишнему расходу памяти и трафику между web-сервером и сервером базы данных, даже если мы будем выбирать элементы по одному и если база данных и web-сервер находятся на одной машине.

Для этих случаев lmbActiveRecord поддерживает так называемые «ленивые атрибуты» Lazy Attributes, которые загружаются из базы данных лишь в том случае, когда их реально запросили.

Для определения того, какие поля являются Lazy используется атрибут $_lazy_attributes, содержащий список таких полей:

class Document extends lmbActiveRecord
{
  protected $_lazy_attributes = array('annotation', 'content');
}

Теперь если мы создадим объект класса Document, загрузим его из базы, то сразу после загрузки некоторые поля его будут еще недоступны:

$document = new Document();
$document->setTitle('a short title');
$document->setAnnotation('not so long annotation');
$document->setContent('very long content');
$document->save();
 
$loaded_document = new Document($document->getId());
$object->hasAttribute('news_date'); // Вернет true
$object->hasAttribute('annotation'); // Вернет false
$object->hasAttribute('contemt'); // Вернет false
 
$object->getAnnotation(); // Вернет  not so long annotation
$object->hasAttribute('annotation'); // Вернет true

Текущая реализация lmbActiveRecord еще не позволяет указать при использовании find()-методов, что нужно загружать некоторые из lazy методов, однако эта функциональность планируется.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
  ____    ___  __  __   __ __   __  ___
 / __ \  / _ \ \ \/ /  / //_/  /  |/  /
/ /_/ / / , _/  \  /  / ,<    / /|_/ / 
\___\_\/_/|_|   /_/  /_/|_|  /_/  /_/
 
limb3_2007_4/ru/packages/active_record/lazy_attributes.txt · Последние изменения: 2010/11/10 10:02 (внешнее изменение)