update
\Bitrix\Main\ORM\Data\UpdateResult public static \Bitrix\Catalog\Model\Entity::update( $id, array $data );
Метод изменяет строку через дочернюю модель, отправляет события модели, обновляет кеш и запускает дополнительные действия дочернего класса. Статический метод.
Дочерняя модель определяет допустимые поля и правила их подготовки.
Параметры
| Параметр | Описание |
|---|---|
$id | Первичный идентификатор изменяемой строки. Проверку значения выполняет дочерняя модель или ORM-таблица |
$data | Плоский массив изменяемых полей или структура с ключами fields, external_fields и actions |
Возвращаемое значение
Метод возвращает объект \Bitrix\Main\ORM\Data\UpdateResult. Объект содержит результат операции и ошибки.
Как работает метод
- Метод нормализует входной массив и отправляет событие
EVENT_ON_BEFORE_UPDATE. Обработчики могут изменить данные или добавить ошибки. - Защищенная точка расширения
prepareForUpdate()дочернего класса проверяет и дополняет поля. - Метод отправляет событие
EVENT_ON_UPDATEи изменяет строку через ORM-таблицу. - Если изменяются кешируемые поля, после успешной записи метод сохраняет их старые значения с префиксом
OLD_и обновляет кеш новыми данными. - Метод отправляет
EVENT_ON_AFTER_UPDATE. Если массивactionsне пуст, он вызывает защищенную точку расширенияrunUpdateExternalActions()дочернего класса.
Пример
Пример временно меняет тестовую цену и восстанавливает исходное значение.
<?php
use Bitrix\Catalog\Model\Price;
use Bitrix\Main\Loader;
if (!Loader::includeModule('catalog'))
{
throw new RuntimeException('Не удалось подключить модуль catalog');
}
// Идентификатор тестовой цены
$priceId = 123;
$price = Price::getRow([
'select' => ['ID', 'PRICE'],
'filter' => ['=ID' => $priceId],
]);
if ($price === null)
{
echo 'Цена не найдена';
return;
}
$updateResult = Price::update($priceId, [
'fields' => ['PRICE' => 1000],
]);
if (!$updateResult->isSuccess())
{
echo implode(PHP_EOL, $updateResult->getErrorMessages());
return;
}
$restoreResult = Price::update($priceId, [
'fields' => ['PRICE' => $price['PRICE']],
]);
if (!$restoreResult->isSuccess())
{
echo implode(PHP_EOL, $restoreResult->getErrorMessages());
return;
}
echo 'Цена изменена и восстановлена';
© «Битрикс», 2001-2026, «1С-Битрикс», 2026