Документация для разработчиков
Темная тема

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. Объект содержит результат операции и ошибки.

Как работает метод

  1. Метод нормализует входной массив и отправляет событие EVENT_ON_BEFORE_UPDATE. Обработчики могут изменить данные или добавить ошибки.
  2. Защищенная точка расширения prepareForUpdate() дочернего класса проверяет и дополняет поля.
  3. Метод отправляет событие EVENT_ON_UPDATE и изменяет строку через ORM-таблицу.
  4. Если изменяются кешируемые поля, после успешной записи метод сохраняет их старые значения с префиксом OLD_ и обновляет кеш новыми данными.
  5. Метод отправляет 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