Если коротко, то чтобы отфильтровать по строковому свойству, то пиши так
$subFilter['PROPERTY_LOCATION'] = 'Москва'; // БЕЗ "_VALUE" на конце
|
Так работать не будет
$subFilter['PROPERTY_LOCATION_VALUE'] = 'Москва'; // хотя казалось бы...
|
"PROPERTY_LOCATION_VALUE" - это только для Списка!
$subFilter['PROPERTY_LOCATION_VALUE'] = 'Москва'; // если свойство типа список
|
___________________________________
Немного нытья. Уже не первый раз пишу эти фильтры, но редко, и каждый раз приходится гуглить, выяснять почему не работает. А почему? Потому, что дерь$овая документация, за столько лет не могут четко и ясно написать. И вот реально, начинаешь понимать, почему нормальные разработчики любят плюнуть в сторону битрикса. Ну казалось бы, постоянные вопросы на форуме, возьми и дополни примерами документацию, напиши более полное описание. Но нет. И не понятно почему.
Казалось бы рабочий же код
$subFilter = [
'IBLOCK_ID' => $programsIblockId,
];
$subFilter['PROPERTY_LOCATION_VALUE'] = 'Москва'; // строковое свойство
$subQuery = CIBlockElement::GetList([], $subFilter, false, false, ['ID', 'NAME', 'PROPERTY_LOCATION']);
|
Но нихера не работает, потому что надо так, и тогда работает
$subFilter['PROPERTY_LOCATION'] = 'Москва'; // убираем _VALUE
|
Думаете это есть в примерах или написано в доке, да хер вам. На самом деле написано, но так витиевато, так неоднозначно, что хрен поймешь о чем там написано. Это целое искусство так изъясняться, может какой-то гребанный псих бюрократ юрист подрабатывал написанием доки, но вот сами почитайте:
PROPERTY_<PROPERTY_CODE> - фильтр по значениям свойств, где PROPERTY_CODE - код свойства или символьный код. Для свойств типа "Список", "Число", "Привязка к элементам" и "Привязка к разделам" - фильтр Число. Для прочих - фильтр Маска;
PROPERTY_<PROPERTY_CODE>_VALUE - фильтр по значениям списка для свойств типа "список" (фильтр Маска), поиск будет осуществляться по строковому значению списка, а не по идентификатору; |
Это можно понять, только после того как съешь ложку соли и немножко дегтя. Я юзал доктрину и activeRecord и мне обычно хватало документации и немного примеров. А тут документация - это просто некий вектор для размышлений и дальнейших исследований.