2011-04-13 7 views
10

continuación es mi condición:cakephp encontrar toda la condición Y O

'OR' => 
    array(
     'AND' => array(
      array('EventCompetitor.is_black' => 1), 
      array('EventCompetitor.is_adult' => 1) 
     ), 
     'AND' => array(
      array('EventCompetitor.is_black' => 0), 
      array('EventCompetitor.is_adult' => 0) 
     ), 
    ), 

Cuando puedo depurar mi consulta, se trata de algo como esto, lo que está mal:

AND ((`EventCompetitor`.`is_black` = 0) AND (`EventCompetitor`.`is_adult` = 0)) AND 

Ahora, eso no es lo que yo quiero, quiero algo como esto:

((`EventCompetitor`.`is_black` = 1) AND (`EventCompetitor`.`is_adult` = 1)) OR ((`EventCompetitor`.`is_black` = 0) AND (`EventCompetitor`.`is_adult` = 0)) 

Cualquier idea, ¿cómo puedo lograrlo?

Gracias!

Respuesta

16

sus subclaves en su "o de" conjuntos con llave tienen el mismo nombre, con la segunda clave ef fectivamente sobreescribiendo el primero. necesita encapsular esas condiciones "Y" en sus propias matrices, para evitar la colisión de la llave.

por ejemplo. en lugar de:

'OR' => 
     array(
       'AND' => array(
           array('EventCompetitor.is_black' => 1), 
           array('EventCompetitor.is_adult' => 1) 
         ), 
       'AND' => array(
           array('EventCompetitor.is_black' => 0), 
           array('EventCompetitor.is_adult' => 0) 
         ), 
      ), 

hacer:

'OR' => 
     array(
       array('AND' => array(
           array('EventCompetitor.is_black' => 1), 
           array('EventCompetitor.is_adult' => 1) 
         )), 
       array('AND' => array(
           array('EventCompetitor.is_black' => 0), 
           array('EventCompetitor.is_adult' => 0) 
         )), 
      ), 
+1

gracias por su explicación, funciona para mí ahora :) –

0

Creo que se necesita una matriz extra() en allí, no estoy seguro, pero vale la pena probarlo:

'OR' => 
    array(
     array(
      'AND' => array(
       array('EventCompetitor.is_black' => 1), 
       array('EventCompetitor.is_adult' => 1) 
      ) 
     ), 
     array(
      'AND' => array(
       array('EventCompetitor.is_black' => 0), 
       array('EventCompetitor.is_adult' => 0) 
      ) 
     ) 
    ), 
3

Yo no lo he probado, pero creo que se necesita lo siguiente:

'OR' => 
    array(
     array(
      array('EventCompetitor.is_black' => 1), 
      array('EventCompetitor.is_adult' => 1) 
     ), 
     array(
      array('EventCompetitor.is_black' => 0), 
      array('EventCompetitor.is_adult' => 0) 
     ) 
    ) 

AND está implícito entre las condiciones, es suficiente para definir OR grupos

+1

+1 para la realización y afirmando que Y está implícito. – khany

Cuestiones relacionadas