Как сделать несколько 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%';

Т.к. индекс у массива один — то затираются…

Весь этот запрос отправляется в что-то типа того:
$idsFiltered = $this->modx->runSnippet('msProducts',array(
                'returnIds' => '1'
                ,'limit' => '0'
                ,'where' => $this->modx->toJSON($where)
                ,'return' => 'sql'
                ,'fastMode' => true
            ));
Как еще можно оформить подобное условие, кроме как в одномерном массиве?

Сложность в том, что $where содержит еще кучу всего, поэтому все в JSON сразу писать сложновато выйдет…

Заранее благодарю за помощь!
Peter Zenin
02 декабря 2013, 14:25
modx.pro
2 659
0

Комментарии: 8

Peter Zenin
02 декабря 2013, 18:45
0
А еще же их надо в скобки забубенить на выходе…
(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something=else
    Peter Zenin
    03 декабря 2013, 20:31
    0
    Вот так ближе к делу, но все равно не хватает скобок:
    $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)
      Василий Наумкин
      03 декабря 2013, 21:33
      1
      0
      Уже очень много раз писали что можно просто писать готовый SQL в условие. В последних версиях можно даже не JSON указывать, а просто:
      &where=`(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something=else`
        Peter Zenin
        03 декабря 2013, 21:45
        0
        Сложность в том, что у меня кроме этого условия, еще есть куча всего в $where в виде массива, который потом toJSON
        То есть мне надо совместить и старый массив условий и новое условие plain text…

        Так нельзя сделать?
          Clean
          03 декабря 2013, 21:47
          0
          я вообще не увидел проблемы- сделал array_merge, а до этого приведи оба массива к цивильному виду
            Peter Zenin
            03 декабря 2013, 21:54
            0
            Один массив, второе — строка. Надо как-то объединить.

            Можно первый массив тоже вручную обойти и сделать строку, но это как-то не очень…
              Василий Наумкин
              03 декабря 2013, 21:58
              0
              Строку можно добавить в массив.
                Peter Zenin
                03 декабря 2013, 22:03
                0
                Спасибо, попробую.
                Просто $where[] = 'строка';?
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8