Как получить категорий с максимальным уровнем вложенности в Bitrix D7?

Добрый день!

Я получаю список категорий из инфоблока вот таким запросом
$res = \Bitrix\Iblock\SectionTable::getList([
            'order' => ["LEFT_MARGIN" => "ASC"],
            'select' => [
                'ID', 'NAME', 'LEFT_MARGIN', 'RIGHT_MARGIN', 'CODE', 'UF_UDS_ID'],
            "filter" => array(
                "IBLOCK_ID" => CATALOG_IBLOCK,
                "ACTIVE" => "Y",
                "GLOBAL_ACTIVE" => "Y",
                "UF_UDS_ID" => false
            ),
        ]);


Как построить запрос таким образом, что бы мне выдавались категории с максимальным уровнем вложенности. То есть поле LEFT_MARGIN должно быть меньше поля RIGHT_MARGIN на 1 (в MYSQL: WHERE `LEFT_MARGIN` = `RIGHT_MARGIN` - 1)
  • Вопрос задан
  • 354 просмотра
Пригласить эксперта
Ответы на вопрос 1
@shahruslan
Веб-программист
Попробуй так:
$res = \Bitrix\Iblock\SectionTable::getList([
    'order' => ["LEFT_MARGIN" => "ASC"],
    'select' => [
        'ID', 'NAME', 'LEFT_MARGIN', 'RIGHT_MARGIN', 'CODE', 'UF_UDS_ID'],
    "filter" => array(
        "IBLOCK_ID" => CATALOG_IBLOCK,
        "ACTIVE" => "Y",
        "GLOBAL_ACTIVE" => "Y",
        "UF_UDS_ID" => false,
        'DIFF' => 1,
    ),
    'runtime' => [
        new ExpressionField('DIFF', '(%s - %s)', ['RIGHT_MARGIN', 'LEFT_MARGIN'])
    ],
]);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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