add
\Bitrix\Main\ORM\Data\AddResult public static \Bitrix\Catalog\Model\Entity::add( array $data );
Метод добавляет строку через дочернюю модель, отправляет события модели, обновляет кеш и запускает дополнительные действия дочернего класса. Статический метод.
Состав полей, проверки и автоматические действия определяет конкретная модель. Например, Product проверяет параметры товара, а Price — значение цены, валюту и диапазон количества.
Параметры
| Параметр | Описание |
|---|---|
$data |
Плоский массив полей или полная структура:
[ "fields" => [ "FIELD_NAME" => "value" ], "external_fields" => [], "actions" => [] ]Ключ fields содержит поля ORM-таблицы. external_fields передает дочерней модели дополнительные данные, которые не записываются напрямую. actions хранит внутренние флаги отложенных действий. Плоский массив метод автоматически помещает в fields
|
Возвращаемое значение
Метод возвращает объект \Bitrix\Main\ORM\Data\AddResult. Объект содержит идентификатор созданной строки и ошибки подготовки или записи.
Как работает метод
- Метод нормализует входной массив и отправляет событие
EVENT_ON_BEFORE_ADD. Обработчики могут изменить данные или добавить ошибки. - Защищенная точка расширения
prepareForAdd()дочернего класса проверяет и дополняет поля. - Метод отправляет событие
EVENT_ON_ADDи добавляет строку через ORM-таблицу дочерней модели. - После успешной записи метод заполняет внутренний кеш и отправляет
EVENT_ON_AFTER_ADD. - Если массив
actionsне пуст, метод вызывает защищенную точку расширенияrunAddExternalActions()дочернего класса.
Пример
Пример временно создает цену тестового товара и удаляет ее. У товара не должно быть цены выбранного типа для диапазона без границ количества.
<?php
use Bitrix\Catalog\Model\Price;
use Bitrix\Main\Loader;
if (!Loader::includeModule('catalog'))
{
throw new RuntimeException('Не удалось подключить модуль catalog');
}
// Идентификатор тестового товара
$productId = 123;
// Идентификатор существующего типа цены
$priceTypeId = 1;
// Код существующей валюты
$currency = 'RUB';
$addResult = Price::add([
'fields' => [
'PRODUCT_ID' => $productId,
'CATALOG_GROUP_ID' => $priceTypeId,
'PRICE' => 1000,
'CURRENCY' => $currency,
],
]);
if (!$addResult->isSuccess())
{
echo implode(PHP_EOL, $addResult->getErrorMessages());
return;
}
$priceId = (int)$addResult->getId();
echo 'Цена создана: ' . $priceId . PHP_EOL;
$deleteResult = Price::delete($priceId);
if (!$deleteResult->isSuccess())
{
echo implode(PHP_EOL, $deleteResult->getErrorMessages());
return;
}
echo 'Тестовая цена удалена';
© «Битрикс», 2001-2026, «1С-Битрикс», 2026