Конструкция (...AND...) OR (...AND...) в &where
Добрый день.
В параметр &where pdoResources передается json-массив параметров для фильтрации. Как должен выглядеть массив следующего вида?
Оф документация тут docs.modx.com/xpdo/2.x/class-reference/xpdoquery/xpdoquery.where, но в ней не написано вроде бы…
Спасибо!
В параметр &where pdoResources передается json-массив параметров для фильтрации. Как должен выглядеть массив следующего вида?
(условие1 LIKE '%%' или условие2 LIKE '%%' или условие3 LIKE '%%') И (условие4 LIKE '%%' или условие5 LIKE '%%' или условие6 LIKE '%%')
Оф документация тут docs.modx.com/xpdo/2.x/class-reference/xpdoquery/xpdoquery.where, но в ней не написано вроде бы…
Спасибо!
Комментарии: 4
$query = $xpdo->newQuery('Box');
$query->where(array(
array(
'width:=' => 15, // note that adding 'AND:' or 'OR:' in front of the attribute, an operator must be used ':='
'OR:width:=' => 10
),
array(
'AND:height:>=' => 10,
'AND:height:<=' => 15
)
));
$boxes = $xpdo->getCollection('Box',$query);
Спасибо за ответ.
А разве это сработает, если будет 3-4-5 условий? Потому что ключ массива получается одинаковый, см. ниже. Об этом есть в этом комменте modx.pro/howto/6198-complex-selection-on-the-tv-settings-in-getresources/#comment-44003
А еще вопрос, как такое условие уложить в json, чтобы использовать в &where от pdoResources?
А разве это сработает, если будет 3-4-5 условий? Потому что ключ массива получается одинаковый, см. ниже. Об этом есть в этом комменте modx.pro/howto/6198-complex-selection-on-the-tv-settings-in-getresources/#comment-44003
array(
'width:=' => 15, // note that adding 'AND:' or 'OR:' in front of the attribute, an operator must be used ':='
'OR:width:LIKE' => '%10%',
'OR:width:LIKE' => '%15%'
)
А еще вопрос, как такое условие уложить в json, чтобы использовать в &where от pdoResources?
Вы можете написать в условии чистый SQL, выделив его прямыми скобками [ ]
А вообще использовать XPDO запросы считается неправильным, они создают лишнюю нагрузку.
Лучше использовать методы pdoTools getCollection и getArray
$query = $xpdo->newQuery('Box');
$query->where(['width' = 15 OR 'width' = 10]
$boxes = $xpdo->getCollection('Box',$query);
Можно использовать любые условия или SQL операторы.А вообще использовать XPDO запросы считается неправильным, они создают лишнюю нагрузку.
Лучше использовать методы pdoTools getCollection и getArray
Спасибо особенно за чистый sql =))
Насчет xpdo, так я и не пытаюсь его использовать, я ищу самое простое решение для моей задачи, а задача сделать выборку со сложным фильтром. Почему-то в документации и примерах по pdoResources примеры только простые. Хотя моя задача — стандартная для обычного фильтра по параметрам (несколько из производителей И несколько из цветов).
Насчет xpdo, так я и не пытаюсь его использовать, я ищу самое простое решение для моей задачи, а задача сделать выборку со сложным фильтром. Почему-то в документации и примерах по pdoResources примеры только простые. Хотя моя задача — стандартная для обычного фильтра по параметрам (несколько из производителей И несколько из цветов).
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.