Типы полей создаваемой таблицы
- IntegerField: Целое число.
- StringField: Строка с фиксированной длиной.
- TextField: Текстовое поле переменной длины.
- FloatField: Число с плавающей запятой.
- BooleanField: Логическое значение (true/false).
- EnumField: Перечисление, представляющееся как список значений.
- DatetimeField: Дата и время.
- DateField: Только дата.
- TimeField: Только время.
- FileField: Ссылка на файл или изображение.
- ReferenceField: Ссылка на другую таблицу.
Атрибуты полей
- primary: Определяет поле как первичный ключ.
- autocomplete: Автоматическое заполнение значения поля при добавлении записи.
- required: Требует обязательного заполнения поля.
- default_value: Задает значение по умолчанию для поля.
Пример Класса ORM
В рамках соблюдения стандартов кодирования, битрикс рекомендует называть поля таблиц в верхнем регистре.
<?php
namespace Yr\Model;// namespace задаем свой
use Bitrix\Main\Entity;
use Bitrix\Main\ORM\Fields\Validators\LengthValidator;
use Bitrix\Main\Type\DateTime;
//Table в конце названия класса обязательно, иначе не будет работать (особенность битрикс)
class TestTable extends Entity\DataManager
{
//Подключение трейта
use \Yr\Trait\OrmTableTrait;
/**
* Returns DB table name for entity.
* @return string
*/
public static function getTableName(){
return 'yr_test'; //название таблицы должно быть уникальным
}
/**
* Returns entity map definition.
* @return array
*/
public static function getMap(){
return [
new Entity\IntegerField('ID', [
'autocomplete' => true,
'primary' => true, // Primary хотябы у одного должен быть,
// иначе таблица не создастся
]),
new Entity\StringField('REFERENCE', [
'required' => true,
]),
new Entity\TextField('DESCRIPTION', [
'required' => false,
'validation' => [__CLASS__, 'validateString'],
]),
new Entity\TextField('PARAMS', [ // Пример поля с json , при записи принимает обычный массив ,
// при получении из табли также отдпет обычнй массив
'required' => false,
'save_data_modification' => function () {
return array(
function ($value) {
return json_encode($value);
}
);
},
'fetch_data_modification' => function () {
return array(
function ($value) {
return json_decode($value, 1);
}
);
}
]),
new Entity\BooleanField('CURRENT', [
'required' => false,
]),
new Entity\EnumField('ENUM', [
'values' => ['VALUE1', 'VALUE2', 'VALUE3'], // Список допустимых значений
]),
new Entity\DatetimeField('DATE_UPDATE', [
'required' => false,
'default_value' => new DateTime()
]),
];
}
public static function validateString(){
return [
new LengthValidator(null, 255)
];
}
}
Пример трейта OrmTableTrait
Для использования трейта в классе прописываем
use \Yr\Trait\OrmTableTrait;
<?php
namespace Yr\Trait;
trait OrmTableTrait{
public static function truncateTable()
{
$connection = \Bitrix\Main\Application::getConnection();
if($connection->isTableExists(self::getTableName())){
$connection->truncateTable(self::getTableName());
}
}
public static function dropTable(){
$connection = \Bitrix\Main\Application::getConnection();
if($connection->isTableExists(self::getTableName())){
$connection->dropTable(self::getTableName());
}
}
public static function createTable(){
$connection = \Bitrix\Main\Application::getConnection();
if(!$connection->isTableExists(self::getTableName())){
self::getEntity()->createDbTable();
}
}
}
Создание таблицы
Если в ORM написан метод createTable используем его
\Yr\Model\TestTable::createTable();
Старый способ
Перед вызовом кода не забываем подключить файл с классом написанным выше.
if (!\Yr\Model\TestTable::getEntity()->getConnection()->isTableExists(\Yr\Model\TestTable::getTableName())) {
\Yr\Model\TestTable::getEntity()->createDbTable();
}