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 дней гарантии