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

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

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

Что такое DataManager

DataManager — это базовый класс ORM в Битрикс, который отвечает за работу с таблицами базы данных. Практически все ORM-сущности системы наследуются от класса:
Bitrix\Main\ORM\Data\DataManager
Например:
Bitrix\Main\UserTable
Bitrix\Main\GroupTable
Bitrix\Main\FileTable
Bitrix\Iblock\ElementTable
Каждая ORM-сущность представляет отдельную таблицу базы данных.

Для чего используется DataManager

DataManager позволяет: Это основной инструмент для разработки модулей и кастомного функционала в Битрикс D7.

Структура ORM-сущности

Любая ORM-сущность должна наследовать DataManager. Простейший пример:
namespace Local\ORM;

use Bitrix\Main\ORM\Data\DataManager;

class ProductTable extends DataManager
{
}
Однако для полноценной работы необходимо описать таблицу и структуру полей.

Метод getTableName()

Метод определяет таблицу базы данных, с которой будет работать ORM. Пример:
public static function getTableName()
{
    return 'local_products';
}
Теперь ORM будет использовать таблицу:
local_products
для всех операций.

Метод getMap()

Метод getMap() описывает структуру полей таблицы. Пример:
use Bitrix\Main\ORM\Fields\IntegerField;
use Bitrix\Main\ORM\Fields\StringField;

public static function getMap()
{
    return [
        new IntegerField('ID', [
            'primary' => true,
            'autocomplete' => true
        ]),

        new StringField('NAME'),

        new StringField('ARTICLE')
    ];
}
Именно этот метод сообщает ORM, какие поля существуют в таблице.

Полноценный пример DataManager

Создадим сущность для хранения товаров.
namespace Local\ORM;

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

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'),

            new FloatField('PRICE')
        ];
    }
}
После этого можно работать с таблицей через ORM.

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

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

$result = ProductTable::add([
    'NAME'    => 'Ноутбук',
    'ARTICLE' => 'NB-001',
    'PRICE'   => 79990
]);
Получение ID новой записи:
$id = $result->getId();

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

Для выборки используется метод getList(). Пример:
$list = ProductTable::getList([
    'select' => [
        'ID',
        'NAME',
        'PRICE'
    ],
    'order' => [
        'ID' => 'DESC'
    ]
]);

while ($item = $list->fetch())
{
    print_r($item);
}
Получим список товаров из таблицы.

Получение одной записи

Получить запись по ID можно следующим образом:
$product = ProductTable::getById(5)->fetch();

echo $product['NAME'];
Метод автоматически сформирует SQL-запрос по первичному ключу.

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

Для фильтрации используется параметр filter. Пример:
$list = ProductTable::getList([
    'filter' => [
        '>PRICE' => 50000
    ]
]);
Будут выбраны товары дороже 50 000 рублей. Поиск по названию:
'filter' => [
    '%NAME' => 'Ноутбук'
]
Аналог SQL:
WHERE NAME LIKE '%Ноутбук%'

Обновление записи

Для изменения данных применяется метод update(). Пример:
ProductTable::update(
    5,
    [
        'PRICE' => 69990
    ]
);
Где:

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

Для удаления используется метод delete(). Пример:
ProductTable::delete(5);
После выполнения запись будет удалена из базы данных. Перед удалением рекомендуется проверять наличие связанных данных.

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

Получить количество записей можно через метод getCount().
$count = ProductTable::getCount([
    '>PRICE' => 10000
]);

echo $count;
Метод возвращает количество элементов, соответствующих фильтру.

Валидация полей

DataManager позволяет выполнять проверку данных. Пример:
use Bitrix\Main\ORM\Fields\Validators\LengthValidator;

new StringField('NAME', [
    'required' => true,
    'validation' => function () {
        return [
            new LengthValidator(null, 255)
        ];
    }
])
Теперь поле станет обязательным для заполнения.

Связи между таблицами

ORM поддерживает связи через Reference. Пример:
use Bitrix\Main\ORM\Fields\Relations\Reference;
use Bitrix\Main\UserTable;

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

События DataManager

Для обработки действий над данными доступны события. Наиболее популярные: Пример:
public static function onBeforeAdd($event)
{
    $fields = $event->getParameter('fields');
}
События позволяют автоматически выполнять дополнительную бизнес-логику.

Использование Query Builder

Каждая сущность DataManager поддерживает Query Builder. Пример:
$query = ProductTable::query();

$query
    ->setSelect(['ID', 'NAME'])
    ->setFilter([
        '>PRICE' => 10000
    ]);

$result = $query->exec();
Это позволяет строить сложные ORM-запросы без SQL.

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

Unknown field definition

Ошибка означает, что в запросе указано поле, отсутствующее в getMap(). Необходимо проверить структуру сущности.

Table not found

Причина — неверное название таблицы в методе:
getTableName()

Empty result

Следует проверить:

ORM не видит новый класс

Необходимо убедиться, что:

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

DataManager рекомендуется применять в следующих случаях: Практически все новые проекты на Битрикс используют DataManager как основу ORM-архитектуры.

Заключение

DataManager является фундаментом ORM в Битрикс D7. С его помощью можно создавать собственные сущности, описывать структуру таблиц, выполнять CRUD-операции и строить сложные запросы через ORM. Использование DataManager позволяет отказаться от ручного написания SQL, делает код более безопасным и значительно упрощает поддержку проекта. Для современной разработки на Битрикс знание DataManager считается обязательным навыком.
База знаний