2017-09-04 61 views
0

我在我的find函數中使用了多個OR條件,但cakephp覆蓋了它,並且只採用最新的OR條件,這非常令人不安。每個或條件集中一個不同的表格。這是我的自定義查找功能:cakephp 2檢索數據時出現多個OR條件

$studies = $this -> Study -> find('studyWithSequence',array(
     'joins' => array(
      array('table' => 'executed_study_tables', // Table name 
       'alias' => 'ExecutedStudyTable', 
       'type' => 'LEFT', 
       'conditions' => array(
        'ExecutedStudyTable.study_id = Study.id', // Mention join condition here 
      ) 
     ) 
     ), 
     'conditions' => array(
      'Study.user_id' => $cId, 
      'OR'=>array(
       array('Study.state'=>'active'), 
       array('Study.state'=>'rehearsal') 
      ),     
      'SubjectFilter.studyCode'=>null, 
      'SubjectFilter.m'=>1, 
      'SubjectFilter.f'=>1, 
      'SubjectFilter.age18_24'=>1, 
      'SubjectFilter.age25_34'=>1, 
      'SubjectFilter.age35_44'=>1, 
      'SubjectFilter.age45_54'=>1, 
      'SubjectFilter.age55plus'=>1, 
      'OR'=>array(
       'NOT'=>array(
        array('ExecutedStudyTable.user_id'=>$user), 
       ), 
       array('ExecutedStudyTable.user_id'=>null) 
      )     
     ), 
    )); 

你知道如何保持雙方或條件? 我很感謝你的回覆

回答

0

我找到了解決方案。 通常cakephp 2用AND連接所有條件,但在我的情況下,你必須手動定義AND條件。像這樣:

$studies = $this -> Study -> find('studyWithSequence',array(
     'joins' => array(
      array('table' => 'executed_study_tables', 
       'alias' => 'ExecutedStudyTable', 
       'type' => 'LEFT', 
       'conditions' => array(
        'ExecutedStudyTable.study_id = Study.id', 
      ) 
     ) 
     ), 
     'conditions' => array(
      'Study.user_id' => $cId, 
      'OR'=>array(
       array('Study.state'=>'active'), 
       array('Study.state'=>'rehearsal') 
      ),     
      'SubjectFilter.studyCode'=>null, 
      'SubjectFilter.m'=>1, 
      'SubjectFilter.f'=>1, 
      'SubjectFilter.age18_24'=>1, 
      'SubjectFilter.age25_34'=>1, 
      'SubjectFilter.age35_44'=>1, 
      'SubjectFilter.age45_54'=>1, 
      'SubjectFilter.age55plus'=>1, 
      'AND'=>array(
      'OR'=>array(
       'NOT'=>array(
        array('ExecutedStudyTable.user_id'=>$user), 
       ), 
       array('ExecutedStudyTable.user_id'=>null) 
      )   
      )  
     ), 
    ));