Modx XPDOQuery Как группировать условия ИЛИ после условия И

Я пытаюсь написать XPDOQuery, чтобы получить в результате SQL выглядит следующим образом:

SELECT *
FROM `table` AS `t` 
WHERE  ( 
    `t`.`id` >= 1 
    AND `t`.`grade` = '3003' 
    AND (`t`.`finish` LIKE '120' 
        OR `t`.`finish` LIKE '180' 
        OR `t`.`finish` LIKE '320' 
        OR `t`.`finish` LIKE '600' 

    )
)

в основном мне нужен набор результатов, где оценка равна 3003, а результат - любое из 120 180 320 600 значений.
В настоящее время я просто перебираю массив отделок, чтобы получить условия where:

$arrayWhere[] = array('id:>=' => 1);

$arrayWhere[] = array('grade' => 3003);

$finishesLong = array('120','180','320','600');

foreach($this->finishesLong as $finish){
    $arrayWhere[] = array('finish:LIKE' => $finish);
}

//Then inserting that into the query
$criteria = $this->modx->newQuery('Data');
$criteria->where($arrayWhere);
$criteria->limit($limit, $offset);
$data= $this->modx->getCollection('Data', $criteria);

Как я могу сгруппировать результаты OR с помощью XPDO?

ОБНОВЛЕНИЕ Я решил решить эту проблему с помощью регулярного выражения, но я думаю, что ответ на первоначальный вопрос все еще будет полезен для сообщества:

$regex = implode('|', $this->finishesFlat); 
$arrayWhere[] = array('finish:NOT REGEXP' => $regex);

0 ответов

Другие вопросы по тегам