2015-06-30 30 views
2

我有一個任務計劃應用程序,我試圖根據兩個標準獲取任務:或者他們在未來2周內有到期日期,或者任務本身在2周內結束。這裏是我的非工作代碼:Cakephp爲'OR'和'AND'查找複雜連接條件的語法

$conditions['AND'] = array(
     'OR'=>array(
      'AND'=>array(
       'Task.due_date >'=> $now, 
       'Task.due_date <'=> $twfn 
      ), 
      'AND'=>array(
       'Task.end_time > '=> $now, 
       'Task.end_time <' => $twfn 
      ) 
     ) 
    ); 

有附加條件,因此外$conditions['AND']

的SQL日誌顯示:

WHERE ((((`Task`.`end_time` > '2015-06-30') AND (`Task`.`end_time` < '2015-07-14'))) 

這意味着該OR沒有被評估。如果相關,每個任務都有一個end_time,但不一定是due_date

任何幫助或指針在正確的方向將不勝感激!

回答

3

使用這樣的:AND S的關係是數組,因爲你給同一個密鑰(AND)的陣列,並從文檔的最後一個將被用於

$conditions['AND'] = array(
    'OR'=>array(
     array(
      'AND'=> array(
       array(
        'Task.due_date >'=> $now, 
       ), 
       array(
        'Task.due_date <'=> $twfn 
       ) 
      ), 
     ), 
     array(
      'AND'=>array(
       array(
        'Task.end_time > '=> $now, 
       ), 
       array(
        'Task.end_time <' => $twfn 
       ) 
      ) 
     ) 
    ) 
); 

更多的例子 http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#complex-find-conditions

+1

感謝您的幫助。我認爲這是一個語法問題,但我最終也學到了一些東西。乾杯! – wordy