@kyja

Bitrix D7 какой самый быстрый по скорости метод получения значения свойства элемента с типом Список?

Подскажите пожалуйста как сделать более производительный вариант получение значения свойства с типом Список?

Сейчас использую такой вариант но как то очень медленый запрос получается

$filter = [
    "IBLOCK_SECTION_ID" => $id_koleccii_take,
];
$select = [
     'take_fabrika.VALUE',  'ID', 'FABRIKA',
];
$runtime = [
   'take_fabrika' => [
        'data_type' =>"\Bitrix\Iblock\PropertyEnumerationTable",
        'reference' => [
        '=this.IBLOCK_ELEMENTS_ELEMENT_CATALOG_FABRIKA_IBLOCK_PROPERTY_ID' => 'ref.PROPERTY_ID',
        '=this.IBLOCK_ELEMENTS_ELEMENT_CATALOG_FABRIKA_VALUE' => 'ref.ID',
        ],              
    ],
$elements2  = \Bitrix\Iblock\Elements\ElementСatalogTable::getList(
            [
                'filter' => $filter,
                'select' => $select,
                'runtime' => $runtime,
            ]
        )->fetchAll();


Свойств получения порядка 35
И запрос выходит очень медленным

Как улучшить?
  • Вопрос задан
  • 447 просмотров
Решения вопроса 1
Starina_js
@Starina_js
full-stack web dev
Если работа с инфоблоками, то можно в select указать свойства сразу, и тогда битрикс сам соединит таблицы
PROP, PROP.VALUE, PROP.ITEM.VALUE, PROP.ELEMENT (типы свойств посмотрите в справке, ссылку указал внизу)

\Bitrix\Iblock\Elements\ElementСatalogTable::getList([
    'select' => [
    'NAME',
    'ID',
    'PROP_TEXT_VALUE' => 'PROP_TEXT.VALUE',  //строка
    'PROP_CITY_VALUE' => 'PROP_CITY.ITEM.VALUE',  // список
    'PROP_COURSE_' => 'PROP_COURSE_ELEMENT.ELEMENT', // свойство с привязкой элемента
   ],
   'cache' => [
      'ttl' => 3600
   ],
])->fetchAll() // если хотим просто массив получить готовый


Если хотим работать с коллекцией, то
$elements = \Bitrix\Iblock\Elements\ElementСatalogTable::getList([
  'select' => [
     'NAME',
     'ID',
     'PROP_NAME.ITEM',  // список
     //'PROP_NAME',  // строка
  ],
  'cache' => [
    'ttl' => 3600
  ],
])->fetchCollection();

foreach ($elements as $element)
{
   echo $element->getPropName()->getValue();
   //echo $element->getPropName()->getElement()->getValue();    
}


Справка по инфоблокам orm (там спойлеры еще гляньте)
https://dev.1c-bitrix.ru/learning/course/index.php...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kyja Автор вопроса
Или 0.209 на 15к элементов это нормально?
Ничего кроме как заменить общее имя свойства на нужные части не смог нагуглить
'FABRIKA.IBLOCK_PROPERTY_ID',
'FABRIKA.VALUE',
Тут https://qna.habr.com/q/672592
аналогичный вопрос и решение по сути такое же или более производительное?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы