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

update

\Bitrix\Main\ORM\Data\UpdateResult public static
\Bitrix\Iblock\IblockTable::update(
	mixed $primary,
	array $data
);

Изменяет поля записи инфоблока в таблице b_iblock через ORM. Статический метод. Унаследован от \Bitrix\Main\ORM\Data\DataManager.

Для изменения настроек действующего инфоблока используйте \CIBlock::Update. ORM-метод не синхронизирует связанные данные: например, изменение LID не обновит привязки к сайтам, а изменение VERSION не преобразует хранение свойств.

Параметры

Параметр Описание
$primary Идентификатор инфоблока либо массив ['ID' => идентификатор]. Параметр обязателен
$data Массив имя поля => значение из карты IblockTable. Также допустима обертка ['fields' => массив полей, 'auth_context' => объект контекста]; auth_context — необязательный объект \Bitrix\Main\Authentication\Context. Передавайте только изменяемые поля; остальные сохраняют прежние значения, кроме автоматически обновляемого TIMESTAMP_X

Например, NAME задает название инфоблока, ACTIVE — активность (Y или N), SORT — индекс сортировки. Для переданных полей действуют валидаторы карты: длина NAME — до 255 символов, CODE и IBLOCK_TYPE_ID — до 50. Переданное обязательное поле не может быть пустым.

Полный состав полей описан в getMap. Связи TYPE и PROPERTIES не являются скалярными столбцами таблицы.

Возвращаемое значение

Объект \Bitrix\Main\ORM\Data\UpdateResult. Проверяйте isSuccess(); сообщения об ошибках доступны через getErrorMessages(). После SQL-обновления getAffectedRowsCount() возвращает число затронутых строк по данным драйвера базы.

Успешный результат не подтверждает, что инфоблок с таким идентификатором существовал: метод не выполняет отдельную проверку наличия записи. При необходимости получите ее до обновления.

Особенности

Метод вызывает события ORM OnBeforeUpdate, OnUpdate и OnAfterUpdate. Обработчик IblockTable::onBeforeUpdate подставляет текущую дату в TIMESTAMP_X, если поле отсутствует или равно null. Поэтому даже пустой массив $data при стандартных обработчиках обновляет дату изменения.

Первичный ключ ID не изменяется через $data. После обновления метод и обработчик onAfterUpdate очищают кеш.

ORM-метод не выполняет действия \CIBlock::Update для связанных настроек. Используйте классический API, если меняете настройки сайта, права или режим хранения свойств.

Исключения

Ошибки настройки ORM, формата данных и выполнения SQL могут привести к исключению. Ошибки проверки полей и отмена операции обработчиком ORM возвращаются в объекте результата. Проверяйте isSuccess() и обрабатывайте исключения отдельно.

Некорректный первичный ключ, например пустой массив или неизвестное имя ключа, вызывает \Bitrix\Main\ArgumentException.

Пример

Пример показывает \CIBlock::Update: создает тестовый инфоблок через классический API, изменяет его название и сортировку, затем удаляет его.

<?php

use Bitrix\Iblock\TypeTable;
use Bitrix\Main\Loader;
use Bitrix\Main\SiteTable;

$iblockId = null;

try
{
	if (!Loader::includeModule('iblock'))
	{
		echo 'Не удалось подключить модуль iblock';
		return;
	}

	$type = TypeTable::getRow(['select' => ['ID'], 'order' => ['ID' => 'ASC']]);
	$site = SiteTable::getRow(['select' => ['LID'], 'order' => ['LID' => 'ASC']]);
	if ($type === null || $site === null)
	{
		echo 'Для примера нужны существующий тип инфоблоков и сайт';
		return;
	}

	$iblock = new \CIBlock();
	$apiCode = uniqid('DocsExample', false);
	$newId = $iblock->Add([
		'IBLOCK_TYPE_ID' => $type['ID'],
		'SITE_ID' => [$site['LID']],
		'NAME' => 'Тестовый инфоблок',
		'API_CODE' => $apiCode,
		'ACTIVE' => 'N',
	]);
	if (!$newId)
	{
		echo htmlspecialchars($iblock->LAST_ERROR, ENT_QUOTES, 'UTF-8');
		return;
	}

	$iblockId = (int)$newId;

	$updated = $iblock->Update($iblockId, [
		'NAME' => 'Обновленный тестовый инфоблок',
		'SORT' => 100,
	]);
	if (!$updated)
	{
		echo 'Не удалось обновить инфоблок: ';
		echo htmlspecialchars($iblock->LAST_ERROR, ENT_QUOTES, 'UTF-8');
		return;
	}

	echo 'Обновлен инфоблок: ' . $iblockId;
}
catch (\Throwable $exception)
{
	echo 'Ошибка: ' . htmlspecialchars($exception->getMessage(), ENT_QUOTES, 'UTF-8');
}
finally
{
	if ($iblockId !== null && !\CIBlock::Delete($iblockId))
	{
		echo 'Не удалось удалить тестовый инфоблок: ' . $iblockId;
	}
}

Продолжить изучение



© «Битрикс», 2001-2026, «1С-Битрикс», 2026