Bitrix Help
Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
Главная » Разработка Битрикс » D7 » ORM в Битрикс: что это такое и как с ним работать

ORM в Битрикс: что это такое и как с ним работать

Обновлено: 2026 • Раздел: D7
Современная разработка на платформе 1С-Битрикс все чаще использует D7 API и ORM вместо устаревших методов работы с базой данных. ORM позволяет получать, изменять и удалять данные без написания SQL-запросов, что делает код более безопасным, понятным и удобным для поддержки. В этой статье подробно рассмотрим, что такое ORM в Битрикс, как оно работает и как использовать его на практике с примерами кода.

Что такое ORM

ORM (Object-Relational Mapping) — это технология объектно-реляционного отображения, которая позволяет работать с данными базы данных через PHP-классы и объекты. Вместо SQL-запроса:
SELECT * FROM b_user WHERE ID = 1
используется PHP-код:
UserTable::getById(1);
ORM самостоятельно формирует SQL-запрос и возвращает результат в удобном формате.

Преимущества ORM в Битрикс

Использование ORM дает множество преимуществ: Сегодня ORM считается стандартом разработки для новых проектов на Битрикс.

Основные классы ORM

Большинство таблиц системы имеют собственные ORM-классы. Например:
Bitrix\Main\UserTable
Bitrix\Iblock\ElementTable
Bitrix\Main\GroupTable
Bitrix\Main\FileTable
Перед использованием необходимо подключить нужный класс:
use Bitrix\Main\UserTable;

Получение одного пользователя

Самый простой пример — получение пользователя по ID.
use Bitrix\Main\UserTable;

$user = UserTable::getById(1)->fetch();

echo $user['LOGIN'];
После выполнения запроса в переменной $user будет массив с данными пользователя.

Получение списка пользователей

ORM позволяет получать сразу несколько записей.
use Bitrix\Main\UserTable;

$result = UserTable::getList([
    'select' => ['ID', 'LOGIN', 'EMAIL'],
    'filter' => ['ACTIVE' => 'Y'],
    'order'  => ['ID' => 'DESC']
]);

while ($user = $result->fetch()) {
    echo $user['LOGIN'] . '<br>';
}
Данный запрос вернет всех активных пользователей.

Фильтрация данных

Для отбора записей используется параметр filter. Примеры:

По ID

'filter' => ['ID' => 15]

По логину

'filter' => ['LOGIN' => 'admin']

По нескольким значениям

'filter' => [
    'ACTIVE' => 'Y',
    '=GROUPS.GROUP_ID' => 1
]

По диапазону дат

'filter' => [
    '>=DATE_REGISTER' => '01.01.2025',
    '<=DATE_REGISTER' => '31.12.2025'
]
ORM поддерживает десятки операторов фильтрации.

Операторы фильтрации ORM

Наиболее используемые операторы:
Оператор Значение
= равно
!= не равно
> больше
< меньше
>= больше или равно
<= меньше или равно
% содержит
!% не содержит
@ входит в массив
!@ не входит в массив
Пример поиска пользователей по части e-mail:
'filter' => [
    '%EMAIL' => '@gmail.com'
]

Добавление записи через ORM

Для создания новой записи используется метод add(). Пример добавления пользователя:
use Bitrix\Main\UserTable;

$result = UserTable::add([
    'LOGIN' => 'testuser',
    'EMAIL' => 'test@example.com',
    'ACTIVE' => 'Y'
]);
Однако для пользователей рекомендуется использовать класс CUser, поскольку он выполняет дополнительную обработку паролей и системных полей. Наиболее часто ORM применяется для собственных таблиц.

Обновление данных

Изменение записи выполняется методом update().
use Bitrix\Main\UserTable;

UserTable::update(
    15,
    [
        'EMAIL' => 'newmail@example.com'
    ]
);
Где:

Удаление записи

Для удаления используется метод delete().
use Bitrix\Main\UserTable;

UserTable::delete(15);
После выполнения запись будет удалена из базы данных. Следует использовать данный метод с осторожностью.

Получение количества записей

Иногда требуется узнать количество элементов.
$count = UserTable::getCount([
    'ACTIVE' => 'Y'
]);

echo $count;
Это значительно удобнее, чем писать отдельный SQL-запрос.

Работа с собственными таблицами

Одно из главных преимуществ ORM — возможность создавать собственные сущности. Пример класса:
namespace Local\ORM;

use Bitrix\Main\ORM\Data\DataManager;
use Bitrix\Main\ORM\Fields\IntegerField;
use Bitrix\Main\ORM\Fields\StringField;

class ProductTable extends DataManager
{
    public static function getTableName()
    {
        return 'local_products';
    }

    public static function getMap()
    {
        return [
            new IntegerField('ID', [
                'primary' => true,
                'autocomplete' => true
            ]),
            new StringField('NAME'),
            new StringField('ARTICLE')
        ];
    }
}
Теперь можно выполнять запросы:
use Local\ORM\ProductTable;

$list = ProductTable::getList()->fetchAll();

JOIN в ORM Битрикс

ORM поддерживает связи между таблицами через ReferenceField. Пример:
new Reference(
    'USER',
    UserTable::class,
    ['=this.CREATED_BY' => 'ref.ID']
)
После этого можно получать связанные данные в одном запросе.
'select' => [
    'ID',
    'NAME',
    'USER.LOGIN'
]
Это аналог SQL JOIN.

Runtime-поля

Иногда необходимо добавить вычисляемое поле прямо в запрос. Пример:
'runtime' => [
    new ExpressionField(
        'FULL_NAME',
        "CONCAT(%s,' ',%s)",
        ['NAME', 'LAST_NAME']
    )
]
Теперь можно получить:
echo $item['FULL_NAME'];
без дополнительной обработки в PHP.

ORM и инфоблоки

Начиная с современных версий Битрикс, многие сущности инфоблоков также поддерживают ORM. Например:
use Bitrix\Iblock\ElementTable;

$list = ElementTable::getList([
    'select' => ['ID', 'NAME']
]);
Однако для работы со свойствами инфоблоков часто продолжают использовать:
CIBlockElement
или сгенерированные ORM-классы элементов.

Типичные ошибки при работе с ORM

Unknown parameter

Ошибка возникает при неправильном указании параметров запроса. Например:
[
    '>=DATE_CREATE' => $date
]
должно находиться внутри массива filter. Правильно:
[
    'filter' => [
        '>=DATE_CREATE' => $date
    ]
]

Не найден класс

Необходимо проверить:
Loader::includeModule('iblock');
или правильность namespace.

Пустой результат

Следует убедиться:

Когда использовать ORM

ORM рекомендуется применять в следующих случаях: Для старых проектов допускается использование legacy-классов, однако новые решения лучше строить на ORM.

Заключение

ORM в Битрикс — это современный инструмент для работы с базой данных через объектный интерфейс. Он позволяет выполнять выборку, добавление, обновление и удаление данных без написания SQL-запросов. Использование ORM делает код более безопасным, читаемым и удобным для сопровождения. Если вы разрабатываете новые проекты на Битрикс D7, рекомендуется использовать именно ORM как основной способ взаимодействия с данными.
База знаний