Как сделать несколько like or в pdoTools?
Появилась необходимость сделать запрос типа того:
$where[«Data.color:LIKE»] = '%red%';
$where[«OR:Data.color:LIKE»] = '%green%';
$where[«OR:Data.color:LIKE»] = '%blue%';
$where[«OR:Data.color:LIKE»] = '%orange%';
Т.к. индекс у массива один — то затираются…
Весь этот запрос отправляется в что-то типа того:
Сложность в том, что $where содержит еще кучу всего, поэтому все в JSON сразу писать сложновато выйдет…
Заранее благодарю за помощь!
$where[«Data.color:LIKE»] = '%red%';
$where[«OR:Data.color:LIKE»] = '%green%';
$where[«OR:Data.color:LIKE»] = '%blue%';
$where[«OR:Data.color:LIKE»] = '%orange%';
Т.к. индекс у массива один — то затираются…
Весь этот запрос отправляется в что-то типа того:
$idsFiltered = $this->modx->runSnippet('msProducts',array(
'returnIds' => '1'
,'limit' => '0'
,'where' => $this->modx->toJSON($where)
,'return' => 'sql'
,'fastMode' => true
));
Как еще можно оформить подобное условие, кроме как в одномерном массиве?Сложность в том, что $where содержит еще кучу всего, поэтому все в JSON сразу писать сложновато выйдет…
Заранее благодарю за помощь!
Комментарии: 8
А еще же их надо в скобки забубенить на выходе…
(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something=else
Вот так ближе к делу, но все равно не хватает скобок:
Скобок не хватает в смысле, что у меня идут много условий в WHERE AND AND а здесь надо добавить AND ( OR OR OR)
$where = array(
0 => array('Data.color:LIKE' => '%red%'),
1 => array('OR:Data.color:LIKE' => '%green%'),
2 => array('OR:Data.color:LIKE' => '%blue%'),
3 => array('OR:Data.color:LIKE' => '%orange%'),
);
Придется пока preg_replace делать и повторно чистый скуль отправлять…Скобок не хватает в смысле, что у меня идут много условий в WHERE AND AND а здесь надо добавить AND ( OR OR OR)
Уже очень много раз писали что можно просто писать готовый SQL в условие. В последних версиях можно даже не JSON указывать, а просто:
&where=`(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something=else`
Сложность в том, что у меня кроме этого условия, еще есть куча всего в $where в виде массива, который потом toJSON
То есть мне надо совместить и старый массив условий и новое условие plain text…
Так нельзя сделать?
То есть мне надо совместить и старый массив условий и новое условие plain text…
Так нельзя сделать?
я вообще не увидел проблемы- сделал array_merge, а до этого приведи оба массива к цивильному виду
Один массив, второе — строка. Надо как-то объединить.
Можно первый массив тоже вручную обойти и сделать строку, но это как-то не очень…
Можно первый массив тоже вручную обойти и сделать строку, но это как-то не очень…
Строку можно добавить в массив.
Спасибо, попробую.
Просто $where[] = 'строка';?
Просто $where[] = 'строка';?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.