delete
\Bitrix\Main\ORM\Data\DeleteResult public static \Bitrix\Iblock\IblockTable::delete( mixed $primary );
Удаляет запись инфоблока из таблицы b_iblock по первичному ключу. Статический метод. Унаследован от \Bitrix\Main\ORM\Data\DataManager.
Для удаления действующего инфоблока используйте \CIBlock::Delete. ORM-метод удаляет только запись из b_iblock и может оставить элементы, свойства, разделы, привязки и другие связанные данные.
Параметры
| Параметр | Описание |
|---|---|
$primary |
Идентификатор инфоблока либо массив ['ID' => идентификатор]. Параметр обязателен |
Возвращаемое значение
Объект \Bitrix\Main\ORM\Data\DeleteResult. Метод isSuccess() сообщает об успехе операции, getErrorMessages() возвращает сообщения об ошибках обработчиков ORM.
Метод не проверяет наличие инфоблока перед SQL-запросом и не возвращает число удаленных строк. Отсутствие записи само по себе не означает ошибку результата.
Особенности
Метод вызывает события ORM OnBeforeDelete, OnDelete и OnAfterDelete. Ошибки обработчиков OnBeforeDelete отменяют удаление. После SQL-запроса метод очищает кеш ORM, а IblockTable::onAfterDelete вызывает \CIBlock::CleanCache.
ORM-метод не удаляет элементы, разделы, свойства, привязки к сайтам, права и файлы. Для полного удаления инфоблока используйте \CIBlock::Delete.
Исключения
Ошибки настройки ORM, формата данных и выполнения SQL могут привести к исключению. Отмена операции обработчиком ORM возвращается в объекте результата. Проверяйте isSuccess() и обрабатывайте исключения отдельно.
Некорректный первичный ключ, например пустой массив или неизвестное имя ключа, вызывает \Bitrix\Main\ArgumentException.
Пример
Пример показывает \CIBlock::Delete: создает тестовый инфоблок через классический API и затем удаляет его вместе со связанными настройками. При ошибке выводит идентификатор созданного инфоблока.
<?php
use Bitrix\Iblock\TypeTable;
use Bitrix\Main\Loader;
use Bitrix\Main\SiteTable;
$iblockId = null;
try
{
if (!Loader::includeModule('iblock'))
{
echo 'Не удалось подключить модуль iblock';
return;
}
$type = TypeTable::getRow(['select' => ['ID'], 'order' => ['ID' => 'ASC']]);
$site = SiteTable::getRow(['select' => ['LID'], 'order' => ['LID' => 'ASC']]);
if ($type === null || $site === null)
{
echo 'Для примера нужны существующий тип инфоблоков и сайт';
return;
}
$iblock = new \CIBlock();
$apiCode = uniqid('DocsExample', false);
$newId = $iblock->Add([
'IBLOCK_TYPE_ID' => $type['ID'],
'SITE_ID' => [$site['LID']],
'NAME' => 'Тестовый инфоблок',
'API_CODE' => $apiCode,
'ACTIVE' => 'N',
]);
if (!$newId)
{
echo htmlspecialchars($iblock->LAST_ERROR, ENT_QUOTES, 'UTF-8');
return;
}
$iblockId = (int)$newId;
if (!\CIBlock::Delete($iblockId))
{
echo 'Не удалось удалить тестовый инфоблок: ' . $iblockId;
return;
}
echo 'Удален тестовый инфоблок: ' . $iblockId;
}
catch (\Throwable $exception)
{
echo 'Ошибка: ' . htmlspecialchars($exception->getMessage(), ENT_QUOTES, 'UTF-8');
}