2014-05-23 3 views
0

처리 상태를 결정하는 2 개의 필드가있는 송장 모델이 있습니다. 하나는 technician_id이고 하나는 date_processed입니다. 그들은 모두 약간 다른 것들에 사용되며, 각각 null 일 수 있습니다.CakePHP - 예상 결과를 반환하지 않는 조건 찾기

date_processed가 null이고 technician_id가 null이거나 현재 사용자의 ID와 동일한 인보이스를 모두 가져 오려고합니다.

나는 내가하고있는 것을 알고 있다고 생각했지만 분명히 나는 ​​금요일에 머리를 쓰거나 뭔가를 할 수 있었는데, 나는 그것을 작동시킬 수 없었기 때문에. 그 곳 technician_id을

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

그러나, 이들 모두 만 송장을 반환 technician_id가 USER_ID와 일치하지 :

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

나는 또한 시도했다 : 여기에 내가 지금 무슨이다 는 null입니다 (date_processed 필드가 올바르게 필터링 됨).

누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까?

+0

먼저 조건을 작성한 다음 찾기 위해 지정하십시오. 당신이 null 조건을 제거 할 필요가 있다는 것을 명심하십시오 – Fury

+0

들여 쓰기가 어렵습니다 ... [** the docs **]를 읽었습니까 (http://book.cakephp.org/2.0/en/models /retrieving-your-data.html#complex-find-conditions) 'OR'조건을 정의하는 방법은 무엇입니까? – 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 
     ) 
); 

그것은 더 과도한 'AND'문을하지 않고 CakePHP의에서 'OR'문을 수행하는이

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

올바른 방법을 말하는 것 같았다

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

고마워요 - 무슨 뜻인지 알 겠어. 알아두면 좋을 것. – Sharon

관련 문제