@Firsov36
full-stack web developer

D7. Выборка разделов с подсчетом количества элементов?

Прошу подсказать, как сделать выборку разделов инфоблока с полем, в котором будет значение количества элементов раздела.

Вот вроде код, но в пустом разделе показывает 1 ...
$iBlockId = 10;
$sectionId = 53;

$filter = [
    'IBLOCK_ID' => $iBlockId,
    'ACTIVE' => 'Y',
    'IBLOCK_SECTION_ID' => $sectionId
];

$select = [
    'ID', 'IBLOCK_ID', 'ELEMENTS_COUNT'
];

$runtime = [
    'elements' => [
        'data_type' =>"Bitrix\Iblock\ElementTable",
        'expression' => 'COUNT(*)',
        'reference' => [
            '=this.IBLOCK_ID' => 'ref.IBLOCK_ID',
            '=this.ID' => 'ref.IBLOCK_SECTION_ID',
            '=this.ACTIVE' => 'ref.ACTIVE',
        ],
        //'join_type' => "LEFT"
    ],
    new Bitrix\Main\Entity\ExpressionField('ELEMENTS_COUNT', 'COUNT(*)')
];

$res = Bitrix\Iblock\SectionTable::getList(
    [
        'filter' => $filter,
        'select' => $select,
        'runtime' => $runtime
    ]
);

while($section = $res->fetch())
{
    \Bitrix\Main\Diag\Debug::dump($section, $section['ID']);
}
  • Вопрос задан
  • 2780 просмотров
Решения вопроса 1
@Firsov36 Автор вопроса
full-stack web developer
Вопрос закрыт. Нашел у себя ошибку.
Кому интересно, делается так:

$iBlockId = 10;
$sectionId = 53;

$filter = [
    'IBLOCK_ID' => $iBlockId,
    'ACTIVE' => 'Y',
    'IBLOCK_SECTION_ID' => $sectionId
];

$select = [
    'ID', 'IBLOCK_ID', 'countElements'
];

$runtime = [
    'elements' => [
        'data_type' =>"Bitrix\Iblock\ElementTable",
        'reference' => [
            '=this.IBLOCK_ID' => 'ref.IBLOCK_ID',
            '=this.ID' => 'ref.IBLOCK_SECTION_ID',
            '=this.ACTIVE' => 'ref.ACTIVE',
        ],
        //'join_type' => "LEFT"
    ],
    'countElements' => [
        'data_type' => 'integer',
        'expression' => ['count(%s)', 'elements.ID']
    ]
];

$res = Bitrix\Iblock\SectionTable::getList(
    [
        'filter' => $filter,
        'select' => $select,
        'runtime' => $runtime
    ]
);

while($section = $res->fetch())
{
    \Bitrix\Main\Diag\Debug::dump($section, $section['ID']);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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