Выборка с использованием условия ИЛИ для системного поля — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 18: Строка 18:
 
== Решение ==
 
== Решение ==
 
Реализовать такую выборку в UMI.CMS  можно, сделав два запроса к базе и получить "пересечение" их результатов, т.е. id страниц, а затем отобрать в результирующем запросе страницы с данными id
 
Реализовать такую выборку в UMI.CMS  можно, сделав два запроса к базе и получить "пересечение" их результатов, т.е. id страниц, а затем отобрать в результирующем запросе страницы с данными id
Предположим, будем искать страницы, у которых либо идентификатор находится в определенном диапазоне, либо страница отмечена чекбоксом, который создал пользователь. На самом деле, режим or-mode в данном случае не понадобится:
+
Предположим, будем искать страницы товаров, у которых либо идентификатор находится в определенном диапазоне, либо страница отмечена чекбоксом, который создал пользователь. На самом деле, режим or-mode в данном случае не понадобится. Выбираем страницы по системному полю id:
  
 
<source lang="php">
 
<source lang="php">
  
 +
$pages = new selector('pages');
 +
$pages->types('object-type')->name('catalog', 'object');
 +
$pages->where('id')->equals(array('идентификаторы страниц через запятую'));
 +
 +
</source>
 +
 +
Теперь выберем страницы отмеченные чекбоксом:
 +
 +
<source lang="php">
 +
 +
$pages = new selector('pages');
 +
$pages->types('object-type')->name('catalog', 'object');
 +
$pages->where('идентификатор поля')->equals(1);
  
 
</source>
 
</source>

Версия 09:55, 2 июня 2014

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

Задача

Предположим необходимо отобрать страницы(например товары) у которых либо id входит в множество определенных значений, либо у этой страницы любое другое поле равно определенному значению. Для выборки с условием "ИЛИ" используется or-mode, но дело в том, что для системных полей данный режим не сработает. Системные поля - это:

  • 'id'
  • 'name'
  • 'owner'
  • 'domain'
  • 'lang'
  • 'is_deleted'
  • 'is_active'
  • 'is_visible'
  • 'updatetime'
  • 'is_default'
  • 'template_id'

Решение

Реализовать такую выборку в UMI.CMS можно, сделав два запроса к базе и получить "пересечение" их результатов, т.е. id страниц, а затем отобрать в результирующем запросе страницы с данными id Предположим, будем искать страницы товаров, у которых либо идентификатор находится в определенном диапазоне, либо страница отмечена чекбоксом, который создал пользователь. На самом деле, режим or-mode в данном случае не понадобится. Выбираем страницы по системному полю id:

$pages = new selector('pages');
$pages->types('object-type')->name('catalog', 'object');
$pages->where('id')->equals(array('идентификаторы страниц через запятую'));

Теперь выберем страницы отмеченные чекбоксом:

$pages = new selector('pages');
$pages->types('object-type')->name('catalog', 'object');
$pages->where('идентификатор поля')->equals(1);