2010-09-20 5 views
1

J'ai une requête find() avec plusieurs conditions, mais le tableau de retour contient des entrées doivent être exclues par les conditions. J'ai lu dans les docs de CakePHP que l'opérateur par défaut est "ET", ce qui devrait signifier que les résultats doivent répondre à toutes les conditions, non?CakePHP Plusieurs conditions ne fonctionnant pas comme prévu

Voici mon code, dans le cas où quelque chose ne va pas avec ça ...

$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)))); 

Quand je teste cela, le tableau est limité par la première condition, mais pas par le second (ou les suivantes). Est-ce que quelqu'un sait ce qui ne va pas ici?

Répondre

2

Ceci est la syntaxe correcte:

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

Notez la double flèche par opposition à une virgule sur les deuxième et troisième lignes, et les deux conditions devraient faire partie du même tableau.

Si cela ne résout pas, vous pouvez essayer de le forcer à utiliser et:

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

Merci! J'ai mal tapé l'exemple ci-dessus et j'avais déjà utilisé le signe => par opposition à une virgule, mais cela ne fonctionnait toujours pas. Cependant, forcer l'AND a fonctionné, ce qui est bizarre parce que c'est censé être la valeur par défaut selon la documentation. Peu importe, merci encore pour l'aide - c'est très apprécié! – Justin

+0

Heureux que je puisse vous aider ... oui, il semblait étrange que vous obteniez des résultats avec ce que vous aviez entré dans la question. – bjudson

Questions connexes