72  /  396

Концепция и архитектура

Просмотров: 393 (Статистика ведётся с 06.02.2017)
Марина Павлова

Каждый инфоблок является самостоятельным типом данных со своим собственным набором свойств. В ORM он представляется отдельной сущностью:

Имя классов сущности включает в себя значение нового поля из настроек инфоблока Символьный код API. За счет этого кода обеспечивается уникальность классов вне зависимости от ID и среды окружения.

Примечание: Чтобы начать использовать ORM для конкретного инфоблока, ему необходимо задать через административный интерфейс Символьный код API (поле API_CODE). Это строка от 1 до 50 символов, начинающаяся с буквы и состоящая из латинских букв и цифр.

Свойства - это не просто скалярные значения, а отношения с отдельными мини-сущностями с двумя ключевыми полями: VALUE и DESCRIPTION. Единичные свойства представляются в элементе инфоблока полем Reference, множественные - OneToMany:

В сущности некоторых типов свойств могут быть добавлены дополнительные поля, например ссылка на привязанный элемент инфоблока:

Подробнее о базовых типах свойств

Ориентироваться среди большого количества свойств поможет механизм аннотаций. При индексации модуля iblock все инфоблоки будут описаны в виде сущностей ORM. Для получения подсказок в коде необходимо явно обозначить класс инфоблока:

// подключение модуля инфоблоков
\Bitrix\Main\Loader::includeModule('iblock');

// вводные данные
$iblockId = 32;
$iblockElementId = 678;

// объект инфоблока
$iblock = \Bitrix\Iblock\Iblock::wakeUp($iblockId);

// объект элемента
/** @var \Bitrix\Iblock\Elements\EO_ElementLink $element */
$element = $iblock->getEntityDataClass()::getByPrimary($iblockElementId)
    ->fetchObject();

// получение свойства SOME_STRING
$element->getSomeString();

Автолоадинг классов автоматически обработает вызов getEntityDataClass(), т.е. вам не придется предварительно компилировать сущность инфоблока.

Если вы хотите использовать подсказки IDE по типизации элемента инфоблока, необходимо явно задать его класс аннотацией вида:

  • для элемента;
    /** @var \Bitrix\Iblock\Elements\EO_ElementLink $element */
    
  • для коллекции,
    /** @var \Bitrix\Iblock\Elements\EO_ElementLink_Collection $element */
    
где Link в имени класса - символьный код API инфоблока.
1
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии