2011-04-13 86 views
10

下面是我的情況:CakePHP的找到所有條件,或

'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) 
     ), 
    ), 

當我調試我的查詢,談到這樣的事情,這是錯誤的:

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

現在,這不是我想,我想這樣的事情:

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

任何想法,我怎麼能實現它?

謝謝!

回答

16

你的子項的「OR」鍵陣列是相同的名稱,與第二密鑰EF有力地覆蓋第一個。您需要將這些「AND」條件封裝在其自己的陣列中,以防止發生關鍵衝突。

例如。而不是:

'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) 
         ), 
      ), 

做:

'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

感謝您的解釋,它現在適用於我:) – 2011-04-13 13:22:17

0

我想你需要一個額外的陣列()在那裏,林不知道,但它值得一試:

'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

我沒有測試過,但我認爲你需要以下條件:

'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的條件之間隱含的,你只需要定義OR

+1

+1實現,並指出,與暗示。 – khany 2014-05-26 09:32:14