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