OlegMifle
@OlegMifle
php-программист

Как фильтровать в ORM bitrix пользовательские свойства?

Пытаюсь выполнить вот такой запрос
$res = Bitrix\Iblock\ElementTable::getList(array(
            'select' => array('ID', 'CODE'),
            'filter' => array(
                '=IBLOCK_ID' => 9,
                '=ACTIVE'=>'Y',
                '!PROPERTY_OWN' => false
                )
            )
        );

При этом скрипт отваливается с ошибкой:

Unknown field definition `PROPERTY_OWN` (PROPERTY_OWN) for Element Entity. (100)


Вроде бы оно и понятно, пользовательские свойства хранятся в другой таблице, но как тогда сделать выборку?
  • Вопрос задан
  • 7857 просмотров
Решения вопроса 1
Из коробки пока никак. Можете скомпилировать сущность со свойствами на лету и через рантайм секцию в гет-листе её добавить к выборке.

Пример (для свойств в отдельной таблице):

//<?php

\Bitrix\Main\Loader::includeModule('iblock');

$iblockId = 155;

$entityPropsSingle = Bitrix\Main\Entity\Base::compileEntity(
    sprintf('PROPS_SINGLE_%s', $iblockId),
    [
        'IBLOCK_ELEMENT_ID' => ['data_type' => 'integer'],
        'PROPERTY_1020' => ['data_type' => 'integer'],
    ],
    [
        'table_name' => sprintf('b_iblock_element_prop_s%s', $iblockId),
    ]
);

\Bitrix\Main\Application::getConnection()->startTracker();

$result = \Bitrix\Iblock\ElementTable::getList([
    'select' => [
        'ID',
        'NAME',
        'PROPS_SINGLE.*',
    ],
    'filter' => [
        '>PROPS_SINGLE.PROPERTY_1020' => 0,
    ],
    'order' => [
        'PROPS_SINGLE.PROPERTY_1020' => 'ASC',
    ],
    'runtime' => [
        'PROPS_SINGLE' => [
            'data_type' => $entityPropsSingle->getDataClass(),
            'reference' => [
                '=this.ID' => 'ref.IBLOCK_ELEMENT_ID'
            ],
            'join_type' => 'inner'
        ],
    ],
]);

// Можно смотреть сформированный запрос
echo '<pre>', $result->getTrackerQuery()->getSql(), '</pre>';

echo '<pre>';print_r($result->fetchAll());echo '</pre>';
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы