Элементы инфоблоков, ORM

Модуль расширенного управления меню для битрикс

Март 20, 2020

Теги: Инфоблоки, ORM

Работа с элементами инфоблоков средствами ORM.

Для работы с элементами инфоблоков через ORM необходимо сначала задать поле "Символьный код API" в настройках инфоблока, после чего, если, например, символьный код инфоблока равен "MyIblock" мы сможем работать с инфоблоком через класс "\Bitrix\Iblock\Elements\ElementMyIblockTable". Также возможен вариант получения класса для работы с инфоблоком по его ID с последующей подстановкой переменной вместо класса:


$iblock \Bitrix\Iblock\Iblock::wakeUp(2);

$iblock::getEntityDataClass()::...

Получение объекта элемента инфоблока с идентификатором в переменной $elementId (с получением значений свойств с кодами "MY_PROP", "MY_LINK_PROP"):


$element=\Bitrix\Iblock\Elements\ElementMyIblockTable::getByPrimary($elementId,array(

    
'select'=>array('ID''NAME''IBLOCK_ID''MY_PROP''MY_LINK_PROP.ELEMENT' )
))->
fetchObject();

Получение массива (или т.н. "коллекции") элементов инфоблока по фильтру:


$elements \Bitrix\Iblock\Elements\ElementMyIblockTable::getList([

    
'select' => ['ID''IBLOCK_ID''MY_PROP''MY_LINK_PROP.ELEMENT'],
    
'filter' => [
        
дадаздесь што-то накалякаю потом
    
],
])->
fetchCollection();
foreach(
$elements as $element)
{
    ...
}

Получение полей из объекта элемента инфоблока (необходимо указывать в "select" при выборке):


$element->getId() // ID

$element->getIblockId() // IBLOCK_ID
$element->getName() // NAME
$element->getPreviewPicture() // PREVIEW_PICTURE
$element->getDetailPicture() // DETAIL_PICTURE

Получение символьного кода связанного раздела и вышележащего раздела:


$element->getIblockSection()->getCode() // IBLOCK_SECTION.CODE

$element->getIblockSection()->getParentSection()->getCode() // IBLOCK_SECTION.PARENT_SECTION.CODE

Получение пути из символьных кодов раздела:


$curSection=$element->getIblockSection(); // 'IBLOCK_SECTION.CODE','IBLOCK_SECTION.PARENT_SECTION.CODE','IBLOCK_SECTION.PARENT_SECTION.PARENT_SECTION.CODE' и т.д.

$sectionPath $curSection->getCode();
    while(
$curSection=$curSection->getParentSection())
        
$sectionPath $curSection->getCode().'/'.$sectionPath;

Получение значения свойства с кодом "MY_PROP" типа "Строка", немножественное:


$element->getMyProp->getValue() // MY_PROP

Получение значений свойства с кодом "MY_PROP" типа "Строка", множественное, и сборка их в массив:


$values = []; // MY_PROP

foreach($element->getMyProp()->getAll() as $value)
    
$values[] = $value->getValue();

Получение значения поля связанного через свойство типа "Привязка к элементам" элемента с кодом "MY_LINK_PROP", немножественного:


$element->getMyLinkProp()->getElement()->getName() // MY_LINK_PROP.ELEMENT.NAME

Получение значений полей связанных через свойство типа "Привязка к элементам" элементов, множественного:


foreach($element->getMyLinkProp()->getAll() as $value// MY_LINK_PROP.ELEMENT.NAME

{
    
$value->getElement()->getName() ...
}

Только получение количества элементов по фильтру (а данном примере со значением свойства "AUTHOR" равным 12):


$сnt \Bitrix\Iblock\Elements\ElementMyIblockTable::getList([

    
'runtime' => array(new \Bitrix\Main\Entity\ExpressionField('CNT''COUNT(*)')),
    
'select' => ['CNT'],
    
'filter' => ['AUTHOR.VALUE'=>12],
])->
fetch()['CNT'];

← Переход к списку