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