2010-09-20 3 views
1

У меня есть запрос find() с несколькими условиями, но возвращаемый массив содержит записи, которые должны быть исключены из условий. Я прочитал в документах CakePHP, что оператор по умолчанию - «AND», что должно означать, что результаты должны соответствовать каждому условию, не так ли?Множественные условия CakePHP не работают, как ожидается

Вот мой код, в случае, если что-то не так с этим ...

$this->set('object', $this->Model->find('all', array('conditions' => 
          array('Model.field between ? and ?', 
          array($value1, $value2)), 
          array('Model.field2 between ? and ?', 
          array($value3, $value4)))); 

Когда я проверить это, массив ограничен первым условием, но не второй (или последующих). Кто-нибудь знает, что здесь не так?

ответ

2

Это правильный синтаксис:

$this->Model->find('all', array('conditions' => array(
    'Model.field BETWEEN ? AND ?' => array($value1, $value2), 
    'Model.field2 BETWEEN ? AND ?' => array($value3, $value4)))); 

Обратите внимание на двойную стрелку, в отличие от запятой на второй и третьей строк, и эти два условия должны быть частью одного и того же массива.

Если это не исправить, вы можете попробовать заставляя его использовать AND:

$this->Model->find('all' array('conditions' => array('AND' => array(
    'Model.field BETWEEN ? AND ?' => array($value1, $value2), 
    'Model.field2 BETWEEN ? AND ?' => array($value3, $value4))))); 
+0

Спасибо! Я неправильно напечатал пример выше и уже использовал => в отличие от запятой, но он все еще не работал. Тем не менее, принудительная работа AND работала, что является странным, потому что это должно быть значение по умолчанию в соответствии с документацией. Несмотря ни на что, еще раз спасибо за помощь - это очень ценится! – Justin

+0

Рад, что я мог бы помочь ... Да, казалось странным, что вы получите какие-то результаты с тем, что вы ввели в вопрос. – bjudson

Смежные вопросы