delete
\Bitrix\Main\ORM\Data\DeleteResult public static \Bitrix\Catalog\Model\Entity::delete( $id );
Метод удаляет строку через дочернюю модель, отправляет события модели, сохраняет старые кешируемые значения и запускает дополнительные действия дочернего класса. Статический метод.
Параметры
| Параметр | Описание |
|---|---|
$id | Первичный идентификатор удаляемой строки |
Возвращаемое значение
Метод возвращает объект \Bitrix\Main\ORM\Data\DeleteResult. Объект содержит результат операции и ошибки.
Как работает метод
- Метод отправляет событие
EVENT_ON_BEFORE_DELETE. Обработчики могут отменить операцию, добавив ошибку. - Метод отправляет
EVENT_ON_DELETEи при необходимости загружает кешируемые данные удаляемой строки. - ORM-таблица дочерней модели удаляет строку.
- После успешного удаления кеш сохраняет найденные прежние значения с префиксом
OLD_. Они доступны защищенной точке расширенияrunDeleteExternalActions(). - Метод отправляет
EVENT_ON_AFTER_DELETEи после успешной операции запускает дополнительные действия дочерней модели.
Особенности
Дочерний класс может переопределить public-метод и использовать другой порядок удаления. Например, Product::delete() удаляет запись без событий модели Entity, но запускает обработчики ORM-таблицы и собственную очистку данных каталога.
Пример
Пример создает временную цену тестового товара и удаляет ее методом, унаследованным моделью Price.
<?php
use Bitrix\Catalog\Model\Price;
use Bitrix\Main\Loader;
if (!Loader::includeModule('catalog'))
{
throw new RuntimeException('Не удалось подключить модуль catalog');
}
// Идентификатор тестового товара
$productId = 123;
// Идентификатор существующего типа цены
$priceTypeId = 1;
// Код существующей валюты
$currency = 'RUB';
$addResult = Price::add([
'fields' => [
'PRODUCT_ID' => $productId,
'CATALOG_GROUP_ID' => $priceTypeId,
'PRICE' => 1000,
'CURRENCY' => $currency,
],
]);
if (!$addResult->isSuccess())
{
echo implode(PHP_EOL, $addResult->getErrorMessages());
return;
}
$deleteResult = Price::delete((int)$addResult->getId());
if (!$deleteResult->isSuccess())
{
echo implode(PHP_EOL, $deleteResult->getErrorMessages());
return;
}
echo 'Тестовая цена удалена';
Была ли эта страница полезна?
Что можно улучшить?
Пользовательские комментарии
Помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2026, «1С-Битрикс», 2026