Как работать с Highload блоками 1С Битрикс ядро D7

В этой статье представлены методы, которые наиболее часто применяются в работе.

Что такое 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 удаляемой записи 

}