2014-05-23 33 views
0

我有發票模型,其中有2場確定其處理狀態。一個是technician_id,另一個是date_processed。它們都用於稍微不同的事情,每個都可以爲空。CakePHP的 - 查找條件不返回預期的結果

我想檢索所有的發票,其中DATE_PROCESSED爲null並且technician_id null或相同的當前用戶的ID。

我以爲我知道我在做什麼,但顯然我有我的星期五頭或什麼,因爲我不能得到它的工作。這是我目前所面對的:

 $conditions = array(
      'Invoice.date_processed' => null, 
      'Invoice.technician_id' => array(null, $user_id) 
      ) 
    ); 

我也試過:

$conditions = array(
      'Invoice.date_processed' => null, 
      'OR' => array(
       'Invoice.technician_id' => null, 
       'Invoice.technician_id' => $user_id 
      ) 
    ); 

然而,這兩個只返回發票在technician_id user_ID的匹配,而不是那些在technician_id爲空(date_processed字段被正確過濾)。

誰能告訴我我做錯了什麼?

+0

首先讓你的條件,然後將其分配給查找。記住,你將需要刪除的空 – Fury

+0

這是一個很難讀壓痕的條件......你看過[**的**文檔(http://book.cakephp.org/2.0/en/models /retrieving-your-data.html#complex-find-conditions)如何定義'或'條件是什麼? – ndm

+0

作出了查找條件更容易閱讀,並在代碼中分離出來。是的,我已經閱讀過文檔,之前也做過類似的事情 - 這次似乎沒有給出預期的結果! – Sharon

回答

1

我認爲解決的辦法可能是這樣的:

$conditions = array(
    'OR' => 
     array(
       array('AND' => array(
           array('Invoice.date_processed' => null), 
           array('Invoice.technician_id' => null) 
         )), 
       array('AND' => array(
           array('Invoice.date_processed' => null), 
           array('Invoice.technician_id' => $user_id) 
         )) 
      ) 
); 
+0

謝謝!這工作完美。不知道爲什麼我沒有想到它。 – Sharon

0

的原因,你的第一個「或」語句不工作是因爲數組在PHP工作,定義關鍵是如何兩次覆蓋了第一個關鍵。

所以,當你在做這個

$conditions = array(
     'Invoice.date_processed' => null, 
     'OR' => array(
      'Invoice.technician_id' => null, 
      'Invoice.technician_id' => $user_id 
     ) 
); 

它更像說這

$conditions = array(
     'Invoice.date_processed' => null, 
     'OR' => array(
      'Invoice.technician_id' => $user_id 
     ) 
); 

做CakePHP中的「OR」語句的正確方法,而無需過度「與」聲明將

$conditions = array(
     'Invoice.date_processed' => null, 
     'OR' => array(
      'Invoice.technician_id' => array(null, $user_id) 
     ) 
); 
+0

謝謝你 - 我明白你的意思。有助於知道。 – Sharon