MODX. &where, примеры записей условий для выборки
Отредактировано: 06 Ноября 2019
Различия записей в языках:
SQL: WHERE width = 15
MODX: &where=`width = 15`
JSON: &where = `{"width":15}`
xPDO: $query->where(array('width' => 15));
inSnippet: 'where' => '{"width":15}'
или 'where' => [ 'width' => 15]
Ссылка на оффициальную документацию
Множественный выбор с условиями
MODX: &where=`width = 15 OR width = 25`
xPDO: $query->where(array
(
array( 'width' => 15), array('OR:width:=' => 25)));
JSON: {"0":{"width :=":"15","AND:height:=":"10"},"OR:width :=":"25"}
inSnippet, php: 'where' => [ 'width' => 15, 'OR:width:=' => 25 ]
Доступные операторы
Символ | Пример xPDO | |
Равно |
'width' => 15 |
|
= | 'width:=' => 15 | |
Не равно | != |
'width:!=' => 15 |
Меньше | > |
'width:>' => 15 |
Больше | < |
'width:<' => 15 |
Больше или равно | >= |
'width:>=' => 15 |
Меньше или равно | <= |
'width:<=' => 15 |
Равно | LIKE |
'width:LIKE' => '%15%' |
Не равно | NOT LIKE |
'width:NOT LIKE' => '%15%' |
В массиве | IN |
'width:IN' => array(15,16,17,20) |
Не в массиве | NOT IN |
'width:NOT IN' => array(15,16,17,20) |
NOT | ||
Если Null | IS |
'width:IS' => null |
IS NULL | ||
Если Not Null | IS NOT NULL | |
Между | BETWEEN | |
Включает | EXISTS | |
Не включает | NOT EXISTS | |
Соединяется | COALESCE | |
Интервал | INTERVAL | |
Наибольшее | GREATEST | |
Наименьшее | LEAST | |
Совпадает | MATCH | |
Максимум | MAX | |
Минимум | MIN | |
В среднем | AVG | |
Или | OR |
array( 'width' => 15), array('OR:width:=' => 10) |
И | AND |
array( 'width' => 15), array('AND:height:=' => 10) |
Теги MODX
[[pdoResources?
&where = `published=1,deleted=0,createdby=12`
...
]]
Для сложных конструкций можно использовать чанк, сниппет или плейсхолдер вместо строки:
[[pdoResources?
&where=`[[CalculatedWhere]]`
...
]]
пример такого сниппета:
$where = array(
'published' => 1,
'deleted' => 0,
'createdby' => $modx->user->get('id'),
);
return $modx->toJSON($where);
Json
[[pdoResources?
&where = `{"published":1,"deleted":0,"createdby":12}`
...
]]
Использование плейсхолдеров
Плейсхолдеры должны формироваться до вызова ресурсов. К примеру сниппет SetWhere формирующий плейсхолдер:
$jsonString = $modx->toJSON($input);
$modx->setPlaceholder('CalculatedWhere', $jsonString);
Вызов сниппетов
[[SetWhere?
&input=`month=January,year=2015`
]]
[[pdoResources?
&where=`[[+CalculatedWhere]]`
...
]]
Несколько вызовов на странице можно сформировать добавив дополнительный параметр. Формирование плейсхолдера:
$placeholderName = $scriptProperties['ph']
// ...
$modx->setPlaceholder($placeholderName, $value);
Вызов на странице:
[[SetWhere?
$month=`January`
&year=`2015
&ph=`January`
]]
[[getResources?
&where=`[[+January]]`
...
]]
...
[[SetWhere?
$month=`February`
&year=`2015
&ph=`February`
]]
[[getResources?
&where=`[[+February]]`
...
]]
Примеры
Получение всех ресурсов, опубликованных в течение определенного месяца того или иного года
[[getResources?
&where=`[[CalculatedWhere? &month=`January` &year=`2015`]]`
...
]]
Сниппет CalculatedWhere
$month = $scriptProperties['month'];
$year = $scriptProperties['year'];
$a_date = $month . ' ' . $year;
$min = strtotime($a_date);
$time = date("Y-m-t 23:59", $min);
$max = strtotime($time);
$where = array(
'publishedon:>=' => $min,
'publishedon:<=' => $max,
);
return $modx->toJSON($where);
// будет сформирована JSON строка вида
// {"publishedon:>=":1420092000,"publishedon:<=":1422770340}
Данные какого-либо плейсхолдера входят в массив
[[pdoResources?
&where = `[[+id]] IN (1,2,3,4,5)`
...
]]
php конструкция, формирующая запрос where
// опубликованные ресурсы, не являющиеся каталогом
$where = array( 'published' => 1, 'isfolder' => 0, );
// формирование were из GET данных
$filter = array();
if($_GET['tags']) {
$filter[] = 'tags='.$_GET['tags'];
}
if($filter) {
$where = $modx->toJSON(array($filter));
} else {
$where = '';
}
$params = array(
...
'where' => $where
);
where и оператор like в php
$arr = array (5,15,10,20);
$params = array(
...
'where' => [
'field:LIKE' => '%'.$arr.'%',
'field2:LIKE' => $arr.'%',
'field3:LIKE' => '%'.$arr
],
...
);
$out = $modx->runSnippet('pdoPage', $params);
Возможные ошибки
- Если после составления условия where в логах возникает ошибка «Error parsing condition with key 0», то вероятно неправильно составлены критерии выборки.
Здравствуйте!
Позвольте представиться, меня зовут Марина. Более 10 лет я занимаюсь обслуживанием сайтов и развитием интернет проектов. Если вы хотите избавиться от хлопот связанных с созданием и поддержкой сайта, тогда вы попали по адресу. При работе с сайтами я предоставляю качественные услуги, ориентируясь на ваши индивидуальные потребности. Для связи со мной воспользуйтесь формой обратной связи.