ORM и D7 в Bitrix24 и 1С-Битрикс
В Bitrix24 и 1С-Битрикс существуют два основных подхода к работе с базой данных: старая ORM и D7 (DataManager). Разберём их различия.
1. Старая ORM (до D7)
Использовалась в старых версиях Битрикс (до версии 15+).
Особенности:
- Работает через классы вида
C[Сущность]
(например,CUser
,CIBlockElement
). - Нет строгой типизации, методы возвращают массивы.
- Меньше возможностей для сложных запросов (JOIN, подзапросы и т. д.).
- Нет встроенной поддержки транзакций.
- Менее производительна из-за отсутствия оптимизации запросов.
Пример:
$user = CUser::GetByID(1)->Fetch();
$iblockElements = CIBlockElement::GetList([], ["IBLOCK_ID" => 1]);
while ($element = $iblockElements->Fetch()) {
// обработка элемента
}
2. D7 (DataManager)
Введён в Битрикс D7 (ядро версии 15+).
Особенности:
- Основан на Doctrine DBAL (более современный и мощный API).
- Поддержка строгой типизации (возвращает объекты).
- Возможность строить сложные запросы (JOIN, подзапросы, агрегатные функции).
- Поддержка транзакций.
- Кэширование на уровне ORM.
- Автогенерация сущностей через
Entity\Base
. - Лучшая производительность за счёт оптимизации запросов.
Пример:
use Bitrix\Main\Entity;
// Определение сущности (если не используется автогенерация)
class UserTable extends Entity\DataManager
{
public static function getTableName()
{
return 'b_user';
}
public static function getMap()
{
return [
new Entity\IntegerField('ID', ['primary' => true]),
new Entity\StringField('LOGIN'),
new Entity\StringField('EMAIL'),
];
}
}
// Запрос к базе
$user = UserTable::getById(1)->fetch();
$query = UserTable::query()
->setSelect(['ID', 'LOGIN'])
->setFilter(['ACTIVE' => 'Y'])
->setLimit(10);
$users = $query->fetchAll();
Сравнение ORM и D7
Критерий | Старая ORM | D7 (DataManager) |
---|---|---|
Синтаксис | Простой, но устаревший | Современный, OOP |
Производительность | Ниже | Выше (кеширование, оптимизация) |
Типизация | Нет (массивы) | Есть (объекты) |
Сложные запросы | Ограничены | Полная поддержка (JOIN, подзапросы) |
Транзакции | Нет | Есть (Bitrix\Main\DB\Connection ) |
Автогенерация | Нет | Есть (Entity\Base ) |
Поддержка | Устаревает | Актуальная |
Вывод
- Старая ORM — подходит для простых задач в старых проектах.
- D7 (DataManager) — современный, мощный и рекомендуемый подход для новых проектов.
Если вы начинаете новый проект на Битрикс — используйте D7.