Separator

 

Bitrix: Быстрое обновление множества элементов инфоблока

Если вы пишите импортёр, или нечто подобное, то порой всплывает необходимость быстро обновить кучу элементов. В битриксе есть CIBlockElement::Update, однако он применяется для одного элемента, и соответственно, для того чтобы обновить 1000 элементов, вам будет нужно сделать как минимум 1000 запросов (API/MySQL). К счастью есть решение. Рассмотрим его ниже.

Итак, прежде чем использовать, нужно помнить:
  1. Ряд полей нельзя менять вообще, например IBLOCK_ID. Изменения может вызвать кучу проблем, т.к. даже сам битрикс его никогда не поменяет через API
  2. При обновлении обычными методами, битрикс многое пересчитывает для смежных таблиц. Мы же таким методом - нет. Отсюда могут быть дополнительные ошибки
  3. Использование прямых запросов к базе в битриксе, плохо так же тем, что при обновлении битрикса структура таблицы может измениться, а соответственно запрос тоже должен быть переписан. Естественно вы заметите это не сразу, и будут ошибки, возможно весьма плачевные. К счастью, в b_iblock_element наврятли будут менять данные столбцы, на них многое завязано в системе
  4. Таким способом можно обновить только "поля", но не "свойства"
При желании метод можно переписать для использования с любой таблицей базы.

Комментариев нет:

Отправить комментарий