Как создать 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
После нажатия на экране появится код класса:
В этом сгенерированном коде определены методы getTableName, в который указывается название таблицы базы данных и getMap, в котором описывается структура таблицы. Это обязательные методы. Без них класс не заработает. Также название класса обязательно должно быть в с постфиксом Table, как на примере – TesthlTable
С этим кодом создается новый файл, например в /local/php_interface/classes/ с названием testhltable.php или, если у вас есть модуль с классами, то в /local/modules/ваш_класс/lib/orm/. Только не забываем поменять namespace класса.
Пример класса, сгенерированного данным способом:
Примеры использования ORM
Теперь, когда у нас есть ORM-класс, можно воспользоваться типизированными функциями. Например, CRUD-таблицы:
Таким образом, можно реализовать свои ORM классы в Битриксе. ORM значительно быстрее работает и упрощает работу с сущностями. Рекомендуется для вручную созданных таблиц и HL-блоков.