В ORM на текущий момент нет массового добавления элементов. Скорее всего такой функционал не появится, поскольку должна работать система событий.
Если
1. Не используются UF_ поля
2. Данные добавляются только в одну таблицу
3. Не нужны события
4. У всех записей одинаковый набор полей
То можно сформировать запрос в полуавтоматическом режиме (аналогичный функционал присутствует старом ядре).
Пусть у нас есть описание сущности: PromoCabinet\Positions\DetailTable
Получаем имя таблицы в базе, соединение, а также объект $sqlHelper
use Bitrix\Main\Type; use Bitrix\Main\Application; use PromoCabinet\Positions\DetailTable; $tableName = DetailTable::getTableName(); $connection = Application::getConnection(DetailTable::getConnectionName()); $sqlHelper = $connection->getSqlHelper(); |
Далее формируем массив полей для добавления для каждого элемента
$item = [ "CLIENT_ID" => $clientId, "DATE" => new Type\Date, "PHRASE" => $phrase, "POSITION_YANDEX" => $positionYandex, "POSITION_GOOGLE" => $positionGoogle, "IS_NEW" => ($wordDateTs > $dateTs), ]; |
Вызываем метод prepareInsert объекта $sqlHelper. Методу передается имя таблицы и массив полей нового элемента (такой же, как и для метода DetailTable::add)
$insert = $sqlHelper->prepareInsert($tableName, $item); |
В итоге получаем список полей и их значений для вставки в базу.
$sql = "INS ERT IN TO ".$sqlHelper->quote($tableName)."(".$insert[0].") "."VALUES (".$insert[1].")";
Используя $insert[0] и несколько $insert[1] можно сформировать единый sql-запрос.и далее выполнить его: $connection->queryExecute($addSql);