add
\Bitrix\Main\ORM\Data\AddResult public static \Bitrix\Iblock\IblockTable::add( array $data );
Добавляет отдельную запись в таблицу b_iblock через ORM. Статический метод. Унаследован от \Bitrix\Main\ORM\Data\DataManager.
Для создания инфоблока этот метод не подходит: он не настраивает связанные данные, необходимые для работы инфоблока. Используйте \CIBlock::Add, который создает запись, привязку к сайтам и другие настройки.
Параметры
| Параметр | Описание |
|---|---|
$data |
Массив имя поля => значение из карты IblockTable. Также допустима обертка ['fields' => массив полей, 'auth_context' => объект контекста]; auth_context — необязательный объект \Bitrix\Main\Authentication\Context |
Поля записи
| Поле | Описание |
|---|---|
IBLOCK_TYPE_ID |
Идентификатор существующего типа инфоблоков. Обязательное поле, до 50 символов |
NAME |
Название инфоблока. Обязательное поле, до 255 символов |
LID |
Идентификатор сайта, до 2 символов. Передайте его явно: столбец базы данных не допускает NULL и не имеет значения по умолчанию |
ID |
Автоинкрементный идентификатор инфоблока. При обычном добавлении не передается |
CODE, API_CODE |
Символьный код инфоблока и код API соответственно, до 50 символов каждый. API_CODE используется для класса элементов |
ACTIVE |
Активность: Y или N |
SORT |
Индекс сортировки |
TIMESTAMP_X |
Дата и время изменения. ORM задает текущую дату по умолчанию; обработчик onBeforeAdd также подставляет ее, если значение отсутствует или равно null |
VERSION |
Режим хранения свойств: 1 — общая таблица, 2 — отдельные таблицы. Значение ORM по умолчанию — 1 |
Полный состав полей описан в getMap. Связи TYPE и PROPERTIES не являются скалярными столбцами таблицы.
Возвращаемое значение
Объект \Bitrix\Main\ORM\Data\AddResult. Метод isSuccess() сообщает об успехе, getErrorMessages() возвращает сообщения об ошибках. После успешного добавления getId() возвращает идентификатор инфоблока, getPrimary() — массив с ключом ID.
Особенности
Метод вызывает события ORM OnBeforeAdd, OnAdd и OnAfterAdd. Перед записью проверяет обязательные поля и валидаторы карты. После записи обработчик IblockTable::onAfterAdd очищает кеш.
Вызов IblockTable::add() не создает привязку в b_iblock_site, не назначает права групп, не сохраняет настройки полей и SEO-шаблоны. При VERSION = 2 он не создает таблицы отдельного хранения свойств. Значение LID в строке b_iblock не заменяет привязку к сайту.
Исключения
Ошибки настройки ORM, формата данных и выполнения SQL могут привести к исключению. Ошибки проверки полей и отмена операции обработчиком ORM возвращаются в объекте результата. Проверяйте isSuccess() и обрабатывайте исключения отдельно.
Пример
Для создания инфоблока используйте \CIBlock::Add. Пример выбирает существующие тип и сайт, добавляет инфоблок с привязкой к сайту и выводит его идентификатор. Созданный инфоблок остается в системе.
<?php
use Bitrix\Iblock\TypeTable;
use Bitrix\Main\Loader;
use Bitrix\Main\SiteTable;
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;
}
// Замените CODE и API_CODE на коды вашего инфоблока; API_CODE должен быть уникальным
$iblock = new \CIBlock();
$iblockId = $iblock->Add([
'IBLOCK_TYPE_ID' => $type['ID'],
'SITE_ID' => [$site['LID']],
'NAME' => 'Новости компании',
'CODE' => 'company_news',
'API_CODE' => 'CompanyNews',
'ACTIVE' => 'Y',
]);
if (!$iblockId)
{
echo htmlspecialchars($iblock->LAST_ERROR, ENT_QUOTES, 'UTF-8');
return;
}
echo 'Создан инфоблок: ' . (int)$iblockId;
}
catch (\Throwable $exception)
{
echo 'Ошибка: ' . htmlspecialchars($exception->getMessage(), ENT_QUOTES, 'UTF-8');
}