Выборка с использованием условия ИЛИ для системного поля — различия между версиями
Williwaw (обсуждение | вклад) |
Williwaw (обсуждение | вклад) |
||
Строка 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);