Выборка с одновременным выполнением двух условий ИЛИ

Материал из Umicms
Версия от 16:20, 29 мая 2014; Williwaw (обсуждение | вклад) (Новая страница: «'''Актуально для версии 2.9.6''' == Задача == Предположим у товаров по группам заданы некие поля…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

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

Задача

Предположим у товаров по группам заданы некие поля и необходимо выбрать те товары, у которых в одной группе полей либо одно поле равно указанному значению, либо другое, при этом, одновременно должно выполняться условие, что в другой группе полей одно или второе поле равно заданному значению, т.е. получится условие вида (А или В) и (С или D). Одним запросом при помощи selector, использую два раза режим or-mode такую выборку сделать не получится.

Решение

Например, найдем все объекты каталога,у которых либо поле "цена", либо поле "вес" равно 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);