2017-09-04 83 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) 
      )   
      )  
     ), 
    ));