Как создать ORM классы в Битрикс?

В этой статье мы рассмотрим как создать ORM класс для любой таблицы Битрикса. Никому не секрет, что методы ядра D7 работают значительно быстрее. Разрабатывать с их помощью гораздо проще, так как все операции однотипные, и по сравнению со старым ядром не требуется запоминать синтаксис, принципы работы и количество параметров.

Когда нужны ORM-классы

ORM классы чаще всего создаются для HL-блоков, иногда и для других таблиц, созданных вручную в MySQL.

Для системных сущностей, таких как товары, корзина, заказы и т.п. – уже есть готовые ORM-классы, например:

\Bitrix\Sale\Internals\BasketTable

\Bitrix\Sale\Internals\ProductTable

ORM-классы полезны, когда нужно ускорить работу с таблицей, стандартизировать код и сделать его проще. Но у таких классов есть недостаток – это сложность получения связанных сущностей. Например, в ORM классе корзины BasketTable нельзя получить свойства корзины или обновить их. Но это все решаемо – делается подзапросом или отдельным методом ORM класса BasketPropertyTable.

Генерация ORM класса

ORM-класс можно создать вручную по структуре таблицы базы данных или сгенерировать средствами Битрикса.

Для того, чтобы сгенерировать вручную нужно перейти в администраторской панели по пути Настройки / Производительность / Таблицы.

Добавить в адресную строку параметр orm=y. Часть ссылки должна выглядеть таким образом:

/bitrix/admin/perfmon_tables.php?lang=ru&orm=y

После перезагрузки в гамбургер-меню выбранной в списке таблицы появится пункт – ORM

Как создать ORM классы в Битрикс?

После нажатия на экране появится код класса:

Как создать ORM классы в Битрикс?

В этом сгенерированном коде определены методы getTableName, в который указывается название таблицы базы данных и getMap, в котором описывается структура таблицы. Это обязательные методы. Без них класс не заработает. Также название класса обязательно должно быть в с постфиксом Table, как на примере – TesthlTable

С этим кодом создается новый файл, например в /local/php_interface/classes/ с названием testhltable.php или, если у вас есть модуль с классами, то в /local/modules/ваш_класс/lib/orm/. Только не забываем поменять namespace класса.

Пример класса, сгенерированного данным способом:

Примеры использования ORM

Теперь, когда у нас есть ORM-класс, можно воспользоваться типизированными функциями. Например, CRUD-таблицы:

Таким образом, можно реализовать свои ORM классы в Битриксе. ORM значительно быстрее работает и упрощает работу с сущностями. Рекомендуется для вручную созданных таблиц и HL-блоков.