Когда в Bitrix появилась ORM (Object-Relational Mapping) на базе Doctrine, многие вздохнули с облегчением. Наконец-то можно работать с объектами, а не с сырыми SQL-запросами! Но как обычно бывает в IT, все не так просто. Давайте разберем, как не настрелять себе по ноги, работая с Bitrix D7.
Самая частая ошибка новичков — использование `CIBlockElement::GetList` вместо D7. Хотя старый API (`CDB...`) все еще работает и иногда нужен для специфических задач, будущее за D7. Классы `Bitrix\Iblock\ElementTable` и `Bitrix\Iblock\PropertyTable` выглядят знакомо для тех, кто работал с Doctrine или Laravel.
Пример работы с элементом:
$element = Bitrix\Iblock\ElementTable::getRowById(123);
Но внимание! ORM Bitrix — это не магия. Под капотом она все равно генерирует SQL. И если вы напишете цикл, где внутри делаете запрос к базе для каждой итерации, ваш сайт умрет от нагрузки. Всегда используйте методы `getList` с фильтрами и выборкой по ID, а не перебирайте всё подряд.
Еще один важный момент — работа с полями. Свойства элементов хранятся в отдельных таблицах. При запросе через ORM вы можете подгружать свойства сразу, указав `SELECT => ['IBLOCK_ELEMENT_ID', 'NAME', 'PROPERTY_Code']`. Это сэкономит вам массу ресурсов. И помните: ORM удобна для чтения и записи сложных сущностей, но для простых операций или выборки огромных массивов данных иногда лучше написать чистый SQL через `Bitrix\Main\DB\Connection`. Это быстрее и надежнее.