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);

Использование агрегатных функций

Bitrix\Main\Loader::includeModule("catalog");
use Bitrix\Iblock\Elements\ElementBrandsTable; // Если используете D7 ORM

$result = ElementBrandsTable::getList([
    'select' => [
        'TOTAL_SUM' => new \Bitrix\Main\Entity\ExpressionField(
            'TOTAL_SUM',
            'SUM(%s)',
            ['PROPERTY.VALUE_NUM']
        )
    ],
    'filter' => [
        '=IBLOCK_ID' => 7,
        '=PROPERTY_PROPERTY.CODE' => 'CHISLO'
    ],
    'runtime' => [
        new \Bitrix\Main\Entity\ReferenceField(
            'PROPERTY',
            'Bitrix\Iblock\ElementPropertyTable',
            [
                '=this.ID' => 'ref.IBLOCK_ELEMENT_ID',
            ]
        ),
        new \Bitrix\Main\Entity\ReferenceField(
            'PROPERTY_PROPERTY',
            'Bitrix\Iblock\PropertyTable',
            [
                '=this.PROPERTY.IBLOCK_PROPERTY_ID' => 'ref.ID',
            ]
        )
    ]
]);

if ($row = $result->fetch()) {
    $sum = $row['TOTAL_SUM'];
    echo "Сумма всех значений свойства CHISLO: " . ($sum ?: 0);
}