Автоматическая генерация ORM-классов
Автоматическая генерация
Для использования генератора ORM классов перейдите на страницу Настройки > Настройки продукта > Настройки модулей > Монитор производительности (модуль Монитор производительности (perfmon) должен быть установлен) и на вкладке Генератор таблетов
Вкладка доступна с версии 20.0.100 модуля Монитор производительности (perfmon).
отметьте поле Разрешить генерацию таблетов для ORM.
У генератора имеются следующие параметры:
| Параметр | Описание | --- | --- | Использовать короткие алиасы классов |
| Использование генератора ORM классов до версии perfmon 20.0.100 |
|---|
Для использования генератора ORM классов перейдите на страницу Настройки > Производительность > Таблицы (должен быть установлен модуль Монитор производительности (perfmon)) и добавьте в адресную строку GET-параметр orm=y. Адрес будет выглядеть так: http://_ваш_сайт_/bitrix/admin/perfmon_tables.php?lang=ru&orm=y. После перезагрузки страницы станет доступен пункт в меню - ORM. |
После включения генератора таблетов на странице Настройки > Производительность > Таблицы в меню действий станет доступен пункт ORM.

Примечание: Имена файлов таблетов предлагаются с суффиксом table (Например: было product.php, стало - producttable.php).
Примечание: Описания полей создаются в виде создания объектов-наследников \Bitrix\Main\ORM\Data\Field (а не в виде ассоциативных массивов как было до версии 20.0.100 модуля perfmon )
Для полей типа timestamp / date / datetime анализируется дефолтное значение (sql). Если это функция, возвращающая текущее время, то в таблете создается функция для получения текущего времени/даты:
Другие особенности для полей:
- Поле помечается как
mandatoryтолько в случае, когда поле является обязательным и не имеет значения по-умолчанию; - Поля типа
text / mediumtextне помечаются как строка.
Пример
Пример автоматического создания ORM-класса
Рассмотрим пример автоматического создания ORM-класса для штатной таблицы шаблонов сайта b_site_template. Воспользуемся пунктом ORM и получим следующий код:
<?php
namespace Bitrix\Site;
use Bitrix\Main\Localization\Loc,
Bitrix\Main\ORM\Data\DataManager,
Bitrix\Main\ORM\Fields\IntegerField,
Bitrix\Main\ORM\Fields\StringField,
Bitrix\Main\ORM\Fields\Validators\LengthValidator;
Loc::loadMessages(__FILE__);
/**
* Class TemplateTable
*
* Fields:
* <ul>
* <li> ID int mandatory
* <li> SITE_ID string(2) mandatory
* <li> CONDITION string(255) optional
* <li> SORT int optional default 500
* <li> TEMPLATE string(255) mandatory
* </ul>
*
* @package Bitrix\Site
**/
class TemplateTable extends DataManager
{
/**
* Returns DB table name for entity.
*
* @return string
*/
public static function getTableName()
{
return 'b_site_template';
}
/**
* Returns entity map definition.
*
* @return array
*/
public static function getMap()
{
return [
new IntegerField(
'ID',
[
'primary' => true,
'autocomplete' => true,
'title' => Loc::getMessage('TEMPLATE_ENTITY_ID_FIELD')
]
),
new StringField(
'SITE_ID',
[
'required' => true,
'validation' => [__CLASS__, 'validateSiteId'],
'title' => Loc::getMessage('TEMPLATE_ENTITY_SITE_ID_FIELD')
]
),
new StringField(
'CONDITION',
[
'validation' => [__CLASS__, 'validateCondition'],
'title' => Loc::getMessage('TEMPLATE_ENTITY_CONDITION_FIELD')
]
),
new IntegerField(
'SORT',
[
'default' => 500,
'title' => Loc::getMessage('TEMPLATE_ENTITY_SORT_FIELD')
]
),
new StringField(
'TEMPLATE',
[
'required' => true,
'validation' => [__CLASS__, 'validateTemplate'],
'title' => Loc::getMessage('TEMPLATE_ENTITY_TEMPLATE_FIELD')
]
),
];
}
/**
* Returns validators for SITE_ID field.
*
* @return array
*/
public static function validateSiteId()
{
return [
new LengthValidator(null, 2),
];
}
/**
* Returns validators for CONDITION field.
*
* @return array
*/
public static function validateCondition()
{
return [
new LengthValidator(null, 255),
];
}
/**
* Returns validators for TEMPLATE field.
*
* @return array
*/
public static function validateTemplate()
{
return [
new LengthValidator(null, 255),
];
}
}
File: /bitrix/modules/site/lang/ru/lib/templatetable.php
<?
$MESS["TEMPLATE_ENTITY_ID_FIELD"] = "";
$MESS["TEMPLATE_ENTITY_SITE_ID_FIELD"] = "";
$MESS["TEMPLATE_ENTITY_CONDITION_FIELD"] = "";
$MESS["TEMPLATE_ENTITY_SORT_FIELD"] = "";
$MESS["TEMPLATE_ENTITY_TEMPLATE_FIELD"] = "";
?>
Таблицы базы данных
Преобразовав этот результат нужным образом получим настоящий класс для работы с шаблонами, расположенный по пути /bitrix/modules/site/lib/templatetable.php.