Bitrix Getlist D7 - IlyaKovanov/lib GitHub Wiki

JOIN вытаскиваем имя клиента из поля привязка к элементам инфоблока

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

use Bitrix\Iblock\Elements\ElementBookingTable;
use Bitrix\Iblock\Elements\ElementKlientsTable;
use \Bitrix\Main\Entity\ReferenceField;

$bookingTable = ElementBookingTable::getList([
    'select' => [
        'NAME',
        'ID',
        'KLIENT_ID_' => 'KLIENT_ID',
        'KLIENT_NAME' => 'KLIENT.NAME', // Выбор имени клиента из инфоблока Klients
    ],
    'runtime' => [
        new ReferenceField(
            'KLIENT', // Имя связи
            ElementKlientsTable::class, // Класс таблицы, с которой мы связываемся
            [
                '=this.KLIENT_ID_VALUE' => 'ref.ID', // Условие связывания
            ],
            [
                'join_type' => 'LEFT' // Тип соединения (LEFT JOIN)
            ]
        ),
    ],
    'limit' => 10,
]);

// Получаем и выводим результаты
$result = $bookingTable->fetchAll();
print_r($result);

Getlist D7 по ID инфоблока и получением всех свойств

<?
namespace Webeks\Core;
use \Bitrix\Main\Entity\ReferenceField;

class WebeksIBlock {

    //GETLIST D7 по ID инфоблока и получением всех свойств
    static function d7IblockGetList($IBLOCK_ID, $LIMIT, $FILTER = [], $SELECT, $ORDER = [], $OFFSET = 0, $RUNTIME = []){
       \Bitrix\Main\Loader::includeModule('iblock');
        if(!$SELECT){
          $arFields = [];
          //собираем массив ключей из свойств инфоблока и пишем альясы для них
          $rsProperty = \CIBlockProperty::GetList('', ['IBLOCK_ID' => $IBLOCK_ID]);
          while($element = $rsProperty->Fetch())
          {
            $arFields[$element["CODE"].'_'] = $element["CODE"];
          }

          $fields = ['ID', 'NAME'];
          $SELECT = array_merge($fields, $arFields);
       }
        
        $entityDataClass = \Bitrix\Iblock\Iblock::wakeUp($IBLOCK_ID)->getEntityDataClass();
        try {	
            $resObject = $entityDataClass::getList(['order' => $ORDER, 'select' => $SELECT, 'filter' => $FILTER, 'runtime' => $RUNTIME, 'limit' => $LIMIT, 'count_total' => 1, 'offset' => $OFFSET]);
            return $resObject;
        } catch (Error $e) {
	    echo $e->getMessage();
        }
    }
    
}

пример использования

use Webeks\Core\WebeksIBlock;
//выводим массив полей одного элемента с ID = 5 из инфоблока IBLOCK_ID = 3 
//если нужно выводить поля PREVIEW_PICTURE и прочие, нужно добавить их в массив $fields
$res = d7IblockGetList(3, 1, ["ID" => "5"], false)->fetchAll();

Группировка по пользовательскому полю

\Bitrix\Main\Loader::includeModule('iblock');
use \Bitrix\Main\Entity\ReferenceField;
$groupTable = Bitrix\Iblock\Elements\ElementBookingTable::getList([
    'select' => [
		'EXCURSION_ID.VALUE',
		new \Bitrix\Main\Entity\ExpressionField(
				'ADULT_SUM',
				"SUM(%s)",
				['ADULT.VALUE']
			)
		],
	'group' => ['EXCURSION_ID.VALUE'],
	'filter' => ['>DATE.VALUE' => '2025-02-01', '<DATE.VALUE' => '2025-02-31'],
])->fetchAll();

print_r($groupTable);