Режим or-mode в selector

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 2.9.5

Задача

Необходимо получить все объекты каталога, у которых либо одно из указанных в выборке полей равно определенному значению(режим fields) или значение какого либо одного поля равно одному из нескольких вариантов(режим field).

Решение

Например, найдем все объекты каталога,у которых либо поле "цена", либо поле "вес" равно 310(fields) Важно: необходимо точно идентификатор типа в выборке. Т.е., если у Вас родительский тип-"объект каталога", а поля, по которым производится выборка находятся, например, в типе "холодильники", и идентификатор типа в выборке указывается как идентификатор родительского типа, то в результате получим ошибку: Ошибка (selectorException): Field "имя_поля" is not presented in selected object types:

$pages = new selector('objects');
$pages->types('object-type')->id(119); 
$pages->option('or-mode')->fields('price','weight'); 
$pages->where('price')->equals(310); 
$pages->where('weight')->equals(310);

Теперь найдем все объекты каталога, у которых поле цена равна, например, либо 580 либо 310:

$pages = new selector('objects');
 $pages->types('object-type')->id(119);  
$pages->option('or-mode')->field('price');  
$pages->where('price')->equals(310); 
$pages->where('price')->equals(580);