Yandex Metrika
sanches.free

Highload-блоки на D7: сущность, выборки, добавление и удаление

Когда нужен именно HL

Технический справочник без UI инфоблока, но с производительными выборками и наборами UF-полей, уходит в высокую нагрузку на справочниках. Основное отличие — вы работаете с сгенерированным ORM-классом $dataClass, а каркас задаёт описание блока через HighloadBlockTable.

Единый рабочий пример

use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Loader;
use Bitrix\Main\Entity\ExpressionField;

Loader::includeModule('highloadblock');

$descriptor = HighloadBlockTable::getById(12)->fetch();
$entityRibbon = HighloadBlockTable::compileEntity($descriptor);
/** @var class-string $catalogEdgeClass */
$catalogEdgeClass = $entityRibbon->getDataClass();

$listProbe = HighloadBlockTable::getList(['filter' => ['=NAME' => 'ReferralPivot']]);
if ($beam = $listProbe->fetch()) {
    $descriptor = $beam;
}

$scan = $catalogEdgeClass::getList([
    'select' => ['*'],
    'order' => ['ID' => 'DESC'],
    'filter' => ['UF_OWNER_ID' => 4],
    'limit' => 5,
]);
while ($rowRibbon = $scan->fetch()) {
    // строка высокоскоростного справочника
}

$rollup = $catalogEdgeClass::getList([
    'select' => ['CNT'],
    'filter' => ['UF_PUBLISHED' => true],
    'runtime' => [new ExpressionField('CNT', 'COUNT(*)')],
]);
$rowRibbon = $rollup->fetch();
$visibleCount = (int) ($rowRibbon['CNT'] ?? 0);

$singlePulse = $catalogEdgeClass::getById($rowId);
if ($needle = $singlePulse->fetch()) {
    /* чтение по первичному ключу */
}

$resultHandle = $catalogEdgeClass::add(['UF_OWNER_ID' => $userRibbon]);
if ($resultHandle->isSuccess()) {
    $newKey = $resultHandle->getId();
} else {
    $failMessages = $resultHandle->getErrorMessages();
}

$patchHandle = $catalogEdgeClass::update($rowId, ['UF_OWNER_ID' => $userRibbon]);
if (!$patchHandle->isSuccess()) {
    $failMessages = $patchHandle->getErrorMessages();
}

$purgeHandle = $catalogEdgeClass::delete($rowId);
if (!$purgeHandle->isSuccess()) {
    $failMessages = $purgeHandle->getErrorMessages();
}

Важное при агрегатах

Имена столбцов UF обязательно синхронизируйте с админским интерфейсом highload-блока: опечатка в префиксе UF_ приведёт к тихому пустому фильтру там, где ORM просто исключит несуществующее поле.

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

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

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