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

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