Yandex Metrika
sanches.free

Highload-блоки: модуль, DataClass и CRUD через ORM

Подключение и получение DataClass

\Bitrix\Main\Loader::includeModule('highloadblock');

$hlblockRow = \Bitrix\Highloadblock\HighloadBlockTable::getById($hlId)->fetch();
$entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($hlblockRow);
$dataClass = $entity->getDataClass();

Найти ID по имени сущности

$hlId = null;
$probe = \Bitrix\Highloadblock\HighloadBlockTable::getList([
    'filter' => ['=NAME' => 'MyEntityName'],
]);
if ($row = $probe->fetch()) {
    $hlId = (int)$row['ID'];
}

Выборки

$list = $dataClass::getList([
    'select' => ['*'],
    'filter' => ['UF_USER_ID' => 4],
    'order' => ['ID' => 'DESC'],
]);
while ($item = $list->fetch()) {
    print_r($item);
}

$limited = $dataClass::getList([
    'select' => ['ID', 'UF_URL'],
    'filter' => ['UF_USER_ID' => 4],
    'order' => ['UF_USER_ID' => 'ASC'],
    'limit' => 5,
]);

Количество строк

use Bitrix\Main\ORM\Fields\ExpressionField;

$aggregate = $dataClass::getList([
    'select' => ['CNT'],
    'filter' => ['UF_ACTIVE' => true],
    'runtime' => [
        new ExpressionField('CNT', 'COUNT(*)'),
    ],
]);
$count = (int)($aggregate->fetch()['CNT'] ?? 0);

Одна запись

$one = $dataClass::getById($primary)->fetch();

Добавление и обновление

$create = $dataClass::add(['UF_USER_ID' => $userId]);
if ($create->isSuccess()) {
    $newId = $create->getId();
} else {
    $create->getErrorMessages();
}

$save = $dataClass::update($primary, ['UF_USER_ID' => $userId]);
if (!$save->isSuccess()) {
    $save->getErrorMessages();
}

Удаление

$drop = $dataClass::delete($primary);
if (!$drop->isSuccess()) {
    $drop->getErrorMessages();
}

Исторически встречается опечатка $entity_data_class из старых заметок — в рабочем коде переменную лучше называть так же, как $dataClass, чтобы не промахнуться регистром.

Итог

Цепочка «модуль → compileEntity → getDataClass» остаётся стандартом для HL: те же фильтры, лимиты и Result-объекты, что и в остальном ORM D7.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии