Блог Горошко Андрея 1C-Битрикс Bitrix D7 ORM: Мастер-класс по ElementTable::getList для выборки элементов

Bitrix D7 ORM: Мастер-класс по ElementTable::getList для выборки элементов

С появлением ядра D7 в 1С-Битрикс у разработчиков появился новый, объектно-ориентированный способ работы с базой данных — ORM (Object-Relational Mapping). Этот подход делает код более чистым, читаемым и зачастую более производительным по сравнению со старым API.

Для работы с элементами инфоблоков в D7 ORM используется класс \Bitrix\Iblock\ElementTable. Его основной метод для выборки данных — getList.

Подготовка к работе

Перед использованием ElementTable необходимо подключить модуль инфоблоков и импортировать класс:

use Bitrix\Main\Loader;
use Bitrix\Iblock\ElementTable;

// Проверяем, подключен ли модуль
if (!Loader::includeModule('iblock')) {
    die('Модуль iblock не установлен');
}

Базовый синтаксис getList

Метод getList принимает один массив с параметрами, который очень похож по своей структуре на SQL-запрос.

$result = ElementTable::getList([
    'select' => [...], // Какие поля выбрать
    'filter' => [...], // Условия фильтрации (WHERE)
    'order'  => [...], // Сортировка (ORDER BY)
    'limit'  => 10,     // Ограничение количества (LIMIT)
    'offset' => 20      // Смещение (OFFSET)
]);

1. Выборка полей (select)

Параметр select определяет, какие поля будут в результате. Можно использовать псевдонимы (алиасы).

// Выбираем ID, название и символьный код элемента,
// при этом полю NAME даем псевдоним TITLE
$result = ElementTable::getList([
    'select' => ['ID', 'TITLE' => 'NAME', 'CODE'],
    'filter' => ['IBLOCK_ID' => 5, 'ACTIVE' => 'Y']
]);

Выборка свойств:
Для выборки свойств нужно использовать механизм «ссылок» (references). Для этого к названию поля свойства добавляется ->VALUE.

// Выбираем ID, название и свойство с кодом "ARTNUMBER"
$result = ElementTable::getList([
    'select' => ['ID', 'NAME', 'ARTICLE' => 'ARTNUMBER.VALUE'],
    'filter' => ['IBLOCK_ID' => 5]
]);

Важно: ARTNUMBER — это символьный код свойства. Для этого синтаксиса ORM сама построит JOIN к таблице свойств.

2. Фильтрация (filter)

Параметр filter полностью аналогичен $arFilter из старого API, но с более строгой и понятной логикой.

// Получаем активные элементы из инфоблока 5,
// у которых свойство "CITY" (с ID 12) равно "Москва"
$result = ElementTable::getList([
    'select' => ['ID', 'NAME'],
    'filter' => [
        '=IBLOCK_ID' => 5,
        '=ACTIVE' => 'Y',
        '=PROPERTY_12' => 'Москва' // Фильтр по свойству через ID
    ]
]);

Можно использовать операторы сравнения прямо в ключе:

  • = — равно (можно опустить)
  • != — не равно
  • > — больше
  • >= — больше или равно
  • % — LIKE

// Элементы, название которых содержит "статья"
'filter' => ['%NAME' => 'статья']

3. Сортировка (order)

Параметр order работает так же, как и в старом API.

$result = ElementTable::getList([
    'select' => ['ID', 'NAME'],
    'filter' => ['IBLOCK_ID' => 5],
    'order' => ['SORT' => 'ASC', 'NAME' => 'DESC']
]);

4. Лимит и смещение (limit, offset)

Эти параметры идеально подходят для постраничной навигации.

// Получить 10 элементов, начиная с 21-го (третья страница)
$result = ElementTable::getList([
    'select' => ['ID', 'NAME'],
    'filter' => ['IBLOCK_ID' => 5],
    'limit' => 10,
    'offset' => 20 // (3-1) * 10
]);

5. Динамические поля (runtime)

ORM D7 позволяет создавать «виртуальные» поля во время выполнения запроса. Например, можно посчитать количество комментариев для новости.

// Пример с подсчетом
$result = ElementTable::getList([
    'select' => ['ID', 'NAME', 'COMMENTS_CNT'],
    'filter' => ['IBLOCK_ID' => 5],
    'runtime' => [
        new \Bitrix\Main\Entity\ExpressionField(
            'COMMENTS_CNT',
            'COUNT(%s)',
            ['IBLOCK_ELEMENT_ID'] // Поле из другой таблицы, связанной с ElementTable
        )
    ]
]);

Обработка результата

Результат getList — это объект \Bitrix\Main\DB\Result. Для получения данных используется цикл while и метод fetch().

$result = ElementTable::getList([
    'select' => ['ID', 'NAME'],
    'filter' => ['IBLOCK_ID' => 5]
]);

while ($element = $result->fetch()) {
    echo "Элемент: " . $element['NAME'] . " (ID: " . $element['ID'] . ")<br>";
}

CIBlockElement::GetList vs. ElementTable::getList

КритерийCIBlockElement::GetList (старое API)ElementTable::getList (D7 ORM)
СинтаксисПроцедурный, массивы с «магическими» ключамиОбъектно-ориентированный, более строгий
ЧитаемостьНизкая, особенно при сложных фильтрахВысокая, напоминает SQL
ПроизводительностьВысокая, но легко написать медленный запросКак правило, выше за счет оптимизации запросов
ВозможностиОграниченыruntime поля, гибкие JOIN-ы, типизация

Вывод: Для новых проектов всегда используйте D7 ORM. Это стандарт современной разработки на Битрикс, который делает ваш код надежнее, понятнее и быстрее.


Bitrix D7, ORM, ElementTable, getList, Bitrix ORM, современная разработка Битрикс, сущности D7, выборка данных, фильтр, select, order, limit, offset.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Добавить комментарий

Related Post

Получить поля элементов свойств корзины sale.basketproperties.getFieldsПолучить поля элементов свойств корзины sale.basketproperties.getFields

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Получить поля элементов свойств корзины sale.basketproperties.getFields», проанализируем лучшие

Оптимизация работы модуля веб-аналитики и рекламных кампаний в ядре 1С-БитриксОптимизация работы модуля веб-аналитики и рекламных кампаний в ядре 1С-Битрикс

Высокая скорость загрузки сайта и безупречная серверная безопасность — обязательные требования для успешного коммерческого проекта на 1С-Битрикс. Услуга «Оптимизация работы модуля веб-аналитики и рекламных кампаний в ядре 1С-Битрикс» обеспечивает очистка

Работа с объектами D7 ORM: fetchObject, save() и коллекции fetchCollectionРабота с объектами D7 ORM: fetchObject, save() и коллекции fetchCollection

Метод getList в D7 ORM по умолчанию возвращает массив данных (fetch()). Но вся мощь ORM раскрывается при работе с объектами. Это делает код более строгим, читаемым и защищенным от ошибок, благодаря автодополнению