Задать вопрос
@denism300

Как в Битрикс создать join запрос к HLBlock?

Есть два highload блока. Нужно взять значения из одного и присоединить к ним цены из второго.
Не могу разобраться с join.
Написал такой код:
use Bitrix\Highloadblock\HighloadBlockTable;
use Bitrix\Main\Entity\ReferenceField;
use Bitrix\Main\Entity\Query;

$servicesHLB    = HighloadBlockTable::getById(4)->fetch();
$servicesEntity = HighloadBlockTable::compileEntity($servicesHLB);
$servicesClass  = $servicesEntity->getDataClass();
$pricesHLB      = HighloadBlockTable::getById(6)->fetch();
$pricesEntity   = HighloadBlockTable::compileEntity($pricesHLB);
$pricesClass    = $pricesEntity->getDataClass();
$hlSelect       = array('ID', 'UF_XML_ID', 'UF_NAME', 'UF_TYPE', 'UF_CATEGORY', 'UF_PRICE_LIST', 'UF_SPECIALIZATION');
$hlOrder        = array('UF_NAME' => 'ASC');
$hlFilter = array('ID' => $rsItem["UF_DIAGNOSTIC_SERVICES"]); // $rsItem["UF_DIAGNOSTIC_SERVICES"] - содержит массив значений
$rsData   = $servicesClass::getList(
    array(
        'select' => $hlSelect,
        'filter' => $hlFilter,
        'runtime' => array(
            new ReferenceField(
                'COST',
                $pricesClass,
                Query\Join::on('this.UF_PRICE_LIST', 'ref.ID')->where('this.UF_PRICE_LIST', true),
                ['join_type' => 'LEFT']
            ),
        ),
        'order'  => $hlOrder,
    )
);
if ($hlItem = $rsData->fetchAll()) {
    AddMessage2Log(print_r($hlItem, 1));
}

в итоге в логи пишется массив значений из первой таблицы без присоединенных из второй.
  • Вопрос задан
  • 71 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
Потому-что в select нужно указать 'COST.<имя поля из COST>'. Например:

$hlSelect = array('COST.ID', 'COST.UF_NAME');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы