В этой статье представлены методы, которые наиболее часто применяются в работе.
Что такое HighloadBlock и как с ним работать?
HighloadBlock — это аналог инфоблока 1С Битрикс, но, как уверяют разработчики, он гораздо проще и «полегче», также эти таблицы гораздо больше подходят для высоконагруженных проектов.
Во всех последующих примерах мы будем работать с таблицей следующей структуры:

Итак, ниже представлены основные методы работы с highload блоками.
Вывести список всех имеющихся highload блоков
use Bitrix\Highloadblock\HighloadBlockTable; // Импортируем класс
if(\Bitrix\Main\Loader::includeModule("highloadblock")){ //Проверяем подключение модуля
$arrHlblocks = array();
$arHlData = HighloadBlockTable::getList(array(
'select' => array("ID", "NAME"), //Поля для выборки
'order' => array('ID' => 'ASC'), //Сортировка
'limit' => '50', // Кол-во выводимых записей
));
while ($arHlbk = $arHlData->Fetch()) { //Формируем массив результатов
$arrHlblocks[$arHlbk['ID']] = $arHlbk['NAME'];
}
//Получить список доступных для выборки полей можно используя метод
HighloadBlockTable::getMap();
}
Выборка записи по значению поля
use Bitrix\Highloadblock\HighloadBlockTable; // Импортируем класс
if (\Bitrix\Main\Loader::includeModule("highloadblock")) { //Проверяем подключение модуля
$hblockId = 3;
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById($hblockId)->fetch();
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
$strEntityDataClass = $obEntity->getDataClass();
$rsData = $strEntityDataClass::getList(array(
'select' => array('ID','UF_NAME','UF_LASTNAME','UF_SURENAME'), // Необходимые для выборки поля
'filter' => array("UF_USER_ID" => 2), //Выберем запись, где значение поля UF_USER_ID равно 2
'order' => array('ID' => 'ASC'), // Сортировка
'limit' => '50',
));
while ($arItem = $rsData->Fetch()) { // Формируем массив данных
$arItems[] = $arItem;
}
}
Добавление записи
use Bitrix\Highloadblock\HighloadBlockTable; // Импортируем класс
if (\Bitrix\Main\Loader::includeModule("highloadblock")) { //Проверяем подключение модуля
$hblockId = 3;
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById($hblockId)->fetch();
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
$strEntityDataClass = $obEntity->getDataClass();
$arElementFields = array(
'UF_NAME' => "Иван",
'UF_LASTNAME' => "Денисов",
'UF_SURENAME' => "Александрович",
'UF_USER_ID' => 4
); // Массив значений новой записи
$obResult = $strEntityDataClass::add($arElementFields); // Добавляем
//Можем сразу полочить информацию о добавленом поле
$ID = $obResult->getID();
$bSuccess = $obResult->isSuccess();
}
Изменение записи
use Bitrix\Highloadblock\HighloadBlockTable; // Импортируем класс
if (\Bitrix\Main\Loader::includeModule("highloadblock")) { //Проверяем подключение модуля
$hblockId = 3;
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById($hblockId)->fetch();
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
$strEntityDataClass = $obEntity->getDataClass();
$fields = array(
'UF_NAME' => "Петр",
'UF_LASTNAME' => "Петров",
'UF_SURENAME' => "Петрович",
'UF_USER_ID' => 6
); // Поля, которые нужно обновить
$result = $strEntityDataClass::update(4, $fields); // где 4 - id обновляемой записи
}
Удаление записи
use Bitrix\Highloadblock\HighloadBlockTable; // Импортируем класс
if (\Bitrix\Main\Loader::includeModule("highloadblock")) { //Проверяем подключение модуля
$hblockId = 3;
$arHLBlock = Bitrix\Highloadblock\HighloadBlockTable::getById($hblockId)->fetch();
$obEntity = Bitrix\Highloadblock\HighloadBlockTable::compileEntity($arHLBlock);
$strEntityDataClass = $obEntity->getDataClass();
$result = $strEntityDataClass::Delete(4); // где 4 - id удаляемой записи
}