В этой статье разберем ключевые аспекты фильтрации данных в Битрикс с помощью arFilter. Вы узнаете, как применять различные условия, строить сложные фильтры и использовать подзапросы для эффективной выборки элементов.
Основные операторы фильтрации в Битрикс
В arFilter доступны не только простые сравнения, но и расширенные операторы:
-
"!"– не равно -
"<"– меньше -
"<="– меньше или равно -
">"– больше -
">="– больше или равно -
"><"– между (редко используется)
Пример:
'>=CATALOG_PRICE_1' => '250', // Цена >= 250
'!PROPERTY_STOCK' => 'N', // Товар не отсутствуетОптимизация выборки данных
Использование arFilter и arSelect позволяет избежать лишних проверок в коде и сократить нагрузку на базу данных.
Пример выборки с фильтром и ограничением полей:
$arFilter = array(
"IBLOCK_ID" => 14,
"ACTIVE" => "Y",
"PROPERTY_SALELEADER_VALUE" => "да"
);
$arSelect = array("ID", "NAME", "CODE"); // Только нужные поляСложная логика фильтрации (AND/OR)
Для составных условий используется LOGIC:
-
"AND"– все условия должны выполняться -
"OR"– хотя бы одно условие должно быть верным
Пример:
$arFilter = array(
"IBLOCK_ID" => $IBLOCK_ID,
array(
"LOGIC" => "OR",
array("<PROPERTY_RADIUS" => 50, "=PROPERTY_CONDITION" => "Y"),
array(">=PROPERTY_RADIUS" => 50, "!=PROPERTY_CONDITION" => "Y"),
)
);Подзапросы в фильтрации
Если нужно отфильтровать элементы по связанным данным, используйте CIBlockElement::SubQuery.
Пример:
$arSubQuery = array('IBLOCK_ID' => 33, '>CATALOG_PRICE_3' => 0);
$arFilter = array(
"SECTION_ID" => $arResult['ID'],
array(
"LOGIC" => "OR",
array('>CATALOG_PRICE_3' => 0, 'IBLOCK_ID' => 6),
array('ID' => CIBlockElement::SubQuery('PROPERTY_CML2_LINK', $arSubQuery)),
)
);Вывод
Правильное использование arFilter в Битрикс позволяет:
Уменьшить количество лишних проверок
Оптимизировать запросы к базе данных
Гибко настраивать выборку элементов
Внедряйте эти методы в свои проекты, чтобы писать чистый и эффективный код!