Skip to content

Instantly share code, notes, and snippets.

@if0rest
Last active December 13, 2021 13:04
Show Gist options
  • Save if0rest/465df52bd297425dba0eed8b4557f7fb to your computer and use it in GitHub Desktop.
Save if0rest/465df52bd297425dba0eed8b4557f7fb to your computer and use it in GitHub Desktop.

Получаем класс сущности

<?
use \Bitrix\Main\Loader,
    \Bitrix\Highloadblock\HighloadBlockTable,
    \Bitrix\Main\Entity;

Loader::includeModule("highloadblock");

$hlblockId = 3;

// Получаем массив данных о Highloadblock
$arHlblock = HighloadBlockTable::getById($hlblockId)->fetch();
/*
    Array
    (
        [ID] => 3
        [NAME] => BrandReference
        [TABLE_NAME] => eshop_brand_reference
    )
*/
$obEntity = HighloadBlockTable::compileEntity($arHlblock);
/*
    Bitrix\Main\ORM\Entity Object
    (
        [className:protected] => \BrandReferenceTable
        [module:protected] =>
        [name:protected] => BrandReference
        [connectionName:protected] => default
        [dbTableName:protected] => eshop_brand_reference
        ...
*/
$entityClass = $obEntity->getDataClass();   // (string) \BrandReferenceTable

Получаем названия полей

$obEntity->getFields();

// Получаем ассоциативный массив, где ключи - это поля highload-блока, а значения — объекты, соответствующие типу поля
array (size=9)
    'ID' => 
        object(Bitrix\Main\ORM\Fields\IntegerField)[80]
            protected 'is_primary' => boolean true
            protected 'is_unique' => boolean false
            ...
    'UF_NAME' => 
        object(Bitrix\Main\ORM\Fields\StringField)[85]
            protected 'format' => null
            protected 'size' => null
            ...

Получаем количество элементов

$cnt = $entityClass::getCount();

Фильтр со сложной логикой

Получить цвета, имена которых начинаются на С или К.

$rsData = $entityClass::getList([
    'select' => array('*'),
    'filter' => array(
        array(
            "LOGIC"=>"OR",
            ["UF_NAME" => 'с%'],
            ["UF_NAME" => 'к%']
        )
    )
]);

while ($el = $rsData->fetch())
    var_dump($el);

По умолчанию логика фильтра — AND, описанный выше фильтр пример логики — OR. Пример посложнее от Антипова Андрея.

Делаем выборку c getList

$rsData = $entityClass::getList([
    "select" => array("*"),
    "order"  => array("ID" => "ASC"),
    "filter" => array(
        ">UF_ID"          => "20",
        "!UF_DESCRIPTION" => false,
        "%UF_XML_ID"      => "company",
    ),
    "limit" => 10,
]);

while ($arData = $rsData->fetch()) {
    var_dump($arData);
    /*
    array (size=3)
      'ID' => string '1' (length=1)
      'UF_NAME' => string 'Фэшн хаус' (length=17)
      'UF_XML_ID' => string 'company1' (length=8)
    */
}

Добавляем запись

// Массив полей для добавления
$addData = array(
    'UF_NAME'        => 'Рам-пам-пам',
    'UF_DESCRIPTION' => 'Какое-то описание',
    'UF_SORT'        => '100',
    'UF_XML_ID'      => 'company8',
    "UF_DATA"        => date("d.m.Y"),
);

$result = $entityClass::add($addData);

if ($result->isSuccess())
    $ID = $result->getId(); // получаем ID созданного элемента хайлоадблока
else
    $errors = $result->getErrorMessages(); // получаем сообщения об ошибках
    /*  Array
        (
            [0] => The value of "Date" is not a valid date or time.<br>
        )
    */

Обновляем запись по ID

// Массив полей для обновления
$updData = array(
    "UF_NAME"   => "Рам-пам-пам 1",
    'UF_XML_ID' => 'company8',
);

$result = $entityClass::update(8, $updData);

if (!$result->isSuccess())
    $errors = $result->getErrorMessages(); // получаем сообщения об ошибках

Удаляем запись по ID

$entityClass::delete(8);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment