API инфоблоков на D7
Доступ к элементам инфоблока через D7 ORM реализуется сгенерированным классом Bitrix\Iblock\Elements\Element{ApiCode}Table на основе параметра API_CODE. В отличие от классического API, сохранение через ORM выполняет только прямую запись в базу и требует ручного вызова обновления поискового индекса, фасетов и сброса тегированного кеша.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
\Bitrix\Iblock\Iblock
-
2
\Bitrix\Iblock\Elements
-
3
ORM для инфоблоков
Материалы
Официальная документация
-
Схема работы инфоблоков и основные объекты Новая дока
-
Производительность и частые ошибки Новая дока
-
Аннотации классов Новая дока
Материалы BXMax
Проверь себя
Импорт через ORM отработал без ошибок, а заказчик жалуется, что новые товары не ищутся на сайте и не попадают в умный фильтр. Где искать?
В том, чего ORM инфоблоков не делает: он не обновляет поисковый индекс, фасетный индекс, SEO-поля и не сбрасывает тегированный кеш. После save() это делают руками — CIBlockElement::UpdateSearch(), PropertyIndex Manager::updateElementIndex() — либо запись оставляют на классическом API.
Свойство есть в админке, но $element->get('BRAND') падает с ошибкой неизвестного поля. Почему?
В карту Element{ApiCode}Table попадают только свойства с заполненным CODE, а сам класс существует только у инфоблока с API_CODE. Проверьте оба поля и вызовите IblockTable::compileEntity(), если класс ещё не собран в этом хите.
Чем set('PHOTO', 123) отличается от set('PHOTO', new PropertyValue(123, 'Описание')) и почему первый вариант плох?
Для файловых свойств ORM ожидает объект Bitrix Iblock ORM PropertyValue с ID файла и описанием; число не даст записать описание. Сам файл кладут через CFile::SaveFile(), а миниатюры ORM не делает — CFile::ResizeImage() отдельно.
Зачем в проекте команда orm:annotate, если код и так работает?
Классы Element{ApiCode}Table и их объекты генерируются на лету, и IDE их не видит: нет подсказок по getBrand() и setName(). Команда создаёт файл аннотаций с описанием сгенерированных классов, чтобы автодополнение и статический анализ работали.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить