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

Материал из Umicms
Перейти к:навигация, поиск
 
(не показаны 2 промежуточные версии этого же участника)
Строка 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">
Строка 17: Строка 17:
 
</source>
 
</source>
  
Результаты можно вывести например так:
+
Теперь найдем все объекты каталога, у которых поле цена равна, например, либо 580 либо 310:  
 +
 
 
<source lang="php">
 
<source lang="php">
foreach($pages as $page){
+
$pages = new selector('objects');
 
+
$pages->types('object-type')->id(119)
        echo "<a href=\"{$page->link}\">{$page->name}</a>\n";
+
$pages->option('or-mode')->field('price'); 
}
+
$pages->where('price')->equals(310);  
echo "Pages found: {$pages->length}";  
+
$pages->where('price')->equals(580);
 
</source>
 
</source>
  
 
[[Категория:API]]
 
[[Категория:API]]

Текущая версия на 16:05, 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);

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