====== Отложенная загрузка некоторых атрибутов. 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 ===== Явное указание загрузки аттрибутов ===== Чтобы сразу загрузить "ленивые" аттрибуты вместе с другими нужно указать специальную опцию в find методе: $obj = lmbActiveRecord::find('Document', array('with_lazy_attributes' => true));