Задать вопрос
  • Как сделать сложный getList запрос в 1С-Битрикс?

    Примерно так, если нужны поля инфоблока:

    use Bitrix\Main\Application;
    use Bitrix\Highloadblock\HighloadBlockTable;
    use Bitrix\Main\Loader;
    
    Loader::includeModule('highloadblock');
    Loader::includeModule('iblock');
    
    $hlBlockId = 2;
    
    $hlblock = HighloadBlockTable::getById($hlBlockId)->fetch();
    
    /** @var \Bitrix\Main\Entity\Base $entity */
    $entity = HighloadBlockTable::compileEntity($hlblock);
    
    /** @var \Bitrix\Main\Entity\DataManager $dataClass */
    $dataClass = $entity->getDataClass();
    
    Application::getConnection()->startTracker();
    
    $result = $dataClass::getList([
        'select' => array(
            'UF_ELEMENT_ID',
            'NAME' => 'ELEMENT.NAME',
            'CODE' => 'ELEMENT.CODE',
            'DETAIL_PICTURE' => 'ELEMENT.DETAIL_PICTURE',
        ),
        'runtime' => array(
            'ELEMENT' => array(
                'data_type' => '\Bitrix\Iblock\ElementTable',
                'reference' => array(
                    '=this.UF_ELEMENT_ID' => 'ref.ID'
                ),
                'join_type' => 'inner'
            ),
        ),
        'limit' => 10,
    ]);
    
    // Можно смотреть сформированный запрос
    echo '<pre>', $result->getTrackerQuery()->getSql(), '</pre>';
    
    while ($row = $result->fetch()) {
        echo '<pre>';print_r($row);echo '</pre>';
    }


    Со свойства чуть сложнее.

    P.S. некоторые примеры с использованием ORM D7
    Ответ написан
    2 комментария