MODX. &where, примеры записей условий для выборки

Различия записей в языках:

SQL: WHERE width = 15

MODX: &where=`width = 15`

JSON: &where = `{"width":15}`

xPDO: $query->where(array('width' => 15));

inSnippet: 'where' => '{"width":15}'

Ссылка на оффициальную документацию

Доступные операторы

  Символ Пример 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  

Теги 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}

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
);

 

?

Благодарю за ответ!

Была ли эта информация полезной?

Здравствуйте!

Позвольте представиться, меня зовут Марина. Более 10 лет я занимаюсь обслуживанием сайтов и развитием интернет проектов. Если вы хотите избавиться от хлопот связанных с созданием и поддержкой сайта, тогда вы попали по адресу. При работе с сайтами я предоставляю качественные услуги, ориентируясь на ваши индивидуальные потребности. Для связи со мной воспользуйтесь формой обратной связи.

Инсталента
Пожалуйста, активируйте JavaScript.
Please enable JavaScript.
return; 1