Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Удаление всех элементов инфоблока

00 голосов
4
Имеется инфоблок с множеством элементов в корне. Как через апи удалить их все скопом, без удаления самого инфоблока?
спросил 20 Сен, 13 от HeHcu (120 баллов)

4 Ответы

00 голосов
Можно так:
Код
$result = CIBlockElement::GetList
(
    array("ID"=>"ASC"),
    array
    (
        'IBLOCK_ID'=>$iblock_id,
        'SECTION_ID'=>0,
        'INCLUDE_SUBSECTIONS'=>'N'
    )
);
   
while($element = $result->Fetch())
    CIBlockElement::Delete($element['ID']);
ответил 26 Сен, 13 от SILVER (340 баллов)
00 голосов
Удалять через цикл поэлементно мне кажется для данной задачи неоптимальным решением, как я понимаю, это тысячи запросов к бд, вместо одного.
Есть другой, несколько более прямой, пока непроверенный, но описанный в доках метод, суть которого в удалении секции вместе со всем содержимым, но для этого придется все элементы внутри инфоблока помещать в некую секцию, что, в общем-то, тоже костыль. Надеюсь, что есть нормальный способ удалять элементы без костылей.
ответил 26 Дек, 13 от HeHcu (120 баллов)
00 голосов
Если нужно выполнить удаление элементов из корня одним запросом, то, скорее всего, нужно писать это обычным SQL-запросом. Когда писал скрипт со сложными взаимодействиями с инфоблоками, то выяснил, что API часто не предоставляет функций для массовой работы с данными или даже хотя бы копирования элемента инфоблока, которое пришлось реализовывать через GetList и последующий Add.
ответил 12 Апр, 14 от SILVER (340 баллов)
00 голосов
Хм, ясно, спасибо.
ответил 05 Авг, 14 от HeHcu (120 баллов)

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

0 голосов
1 ответ
0 голосов
2 ответов
спросил 08 Дек, 13 от Snezhka (2,240 баллов)
0 голосов
0 ответов
спросил 17 Янв, 14 от Maximus1 (380 баллов)
0 голосов
2 ответов
0 голосов
5 ответов