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

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
Наверх