@Mad-cote

Для чего нужен wakeUp в Битрикс?

Добрый день, есть небольшое непонимание по поводу метода wakeUp в Битриксе. Зачем он нужен и для чего?

К примеру, мы можем получить сущность инфоблока таким образом:
$classEntity = \Bitrix\Iblock\Iblock::wakeUp(IBLOCK_CATALOG_ID)->getEntityDataClass();


Также, из документации Битрикс мы видим, что можно обратиться таким образом к своим классам:
$book = \Bitrix\Main\Test\Typography\Book::wakeUp(
	['ID' => 1, 'TITLE' => 'Title 1']
);


Но, зачем? Если мы можем напрямую обратиться к сущности и получить все данные
\Bitrix\Iblock\Elements\ElementProductsTable::getByPrimary...


В документации написано, что "для инициализации объекта необязательно выбирать их повторно из базы данных. Объект можно восстановить, имея как минимум значения первичного ключа", но откуда тогда он берет данные? Где они хранятся в таком случае? В кеше, в сессии, в памяти? Откуда и куда он восстанавливает сущность? В общем, один простой вопрос - нафига он нужен?

Буду благодарен за любые подсказки и мало-мальские примеры в реальной практике для понимания.
  • Вопрос задан
  • 120 просмотров
Пригласить эксперта
Ответы на вопрос 2
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Ответ написан
Комментировать
если посмотреть код, то видно, что при wakeUp не выполняется никаких обращений к БД.
Метод в файле bitrix/modules/main/lib/orm/objectify/entityobject.php
смотрите разницу:
fill*() - подгружает значение из БД
set*() - задаёт значение свойства, но при несовпадении со старым значением переводит объект в состояние State::CHANGED
wakeUp() -создаёт объект с указанными значениями свойств, не переводя объект в изменённое состояние, но только при условии, что в аргументе есть первичный ключ.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы