ragnar_ok
@ragnar_ok

Bitrix ORM: Как реализовать импорт в инфоблок нескольких тысяч элементов?

Реализую импорт в инфоблок нескольких тысяч элементов.

Пытаюсь использовать Bitrix ORM - ElementTable::add(); выводит: Для добавления элементов инфоблоков используйте вызов CIBlockElement::Add().

Понимаю, что можно избавиться от метода add(), который переопредляется в ElementTable (выводит ошибку) и работать средствами D7 с таблицами инфоблока bitrix/modules/iblock/lib/element.php. Но ведь почему-то разработчики Битрикса решили от него отказаться? Выходит нужно использовать старый CIBlockElement::Add() без вариантов?

Как реализовать импорт по шагам? Есть какой-то аналог Batch Processing от Doctrine?

Короче говоря, как оптимизировать это:

foreach ($itemArray as $item) {
  CIBlockElement::Add($item, false, false, false);
}
  • Вопрос задан
  • 814 просмотров
Решения вопроса 1
gromdron
@gromdron
Работаю с Bitrix24
Но ведь почему-то разработчики Битрикса решили от него отказаться?


Они не "решили отказаться", они его архитектурно еще не сделали. Элементы инфоблоков это не только запись в таблице это еще и свойства, которые могут хранится в двух вариантах, так что это вовсе не так просто.

Выходит нужно использовать старый CIBlockElement::Add() без вариантов?

Если хотите атомарно и без нарушений логики - да.
По факту, если у вас простая запись, т.е. без свойств, то можно подглядеть что он делает и выполнить по аналогии. Будет в целом почти равнозначно для импорта.

Есть какой-то аналог Batch Processing от Doctrine?

Аналогов нет, но и операция не такая уж частая. Есть потребность в таких объемах - обычно либо это сторонние каталоги (цены, наличие, свойства и т.п.) и тут без CIblockElement::add не обойтись, либо своя таблица (а там уже что хочешь, хоть sql)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Snatch87
Битриксоид по принуждению
Как обходной путь, Вы можете унаследоваться от ElementTable и переопределить в своем классе метод add, а там уже реализовать собственное добавление
Ответ написан
Ваш ответ на вопрос

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

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