Режим or-mode в selector — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 7: Строка 7:
 
== Решение ==
 
== Решение ==
 
Например, найдем все объекты каталога,у которых либо поле "цена", либо поле "вес" равно 310(fields)
 
Например, найдем все объекты каталога,у которых либо поле "цена", либо поле "вес" равно 310(fields)
Важно: необходимо  точно идентификатор типа в выборке. Т.е., если у Вас родительский тип-"объект каталога", а поля, по которым производится выборка находятся, например, в типе "холодильники", и идентификатор типа в выборке  указывается как идентификатор родительского типа, то в результате получим ошибку: <span style="font-weight:bold">Ошибка (selectorException): Field "weight" is not presented in selected object types</span>:
+
Важно: необходимо  точно идентификатор типа в выборке. Т.е., если у Вас родительский тип-"объект каталога", а поля, по которым производится выборка находятся, например, в типе "холодильники", и идентификатор типа в выборке  указывается как идентификатор родительского типа, то в результате получим ошибку: <span style="font-weight:bold">Ошибка (selectorException): Field "имя_поля" is not presented in selected object types</span>:
  
 
<source lang="php">
 
<source lang="php">

Версия 15:59, 25 февраля 2014

Актуально для версии 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);

Результаты можно вывести например так:

foreach($pages as $page){

        echo "<a href=\"{$page->link}\">{$page->name}</a>\n";
}
echo "Pages found: {$pages->length}";