2015-09-04 45 views
0

我有两个表。合同和学生。我有两个自定义过滤器。当我选择注册过滤器时,我的查询返回正确的行。但是,当我选择未注册的过滤器时,我想返回未注册的学生。现在它返回所有的学生。我的查询是这样的:比较表Yii

if ($this->filter=='R'){ 
    $criteria->addBetweenCondition('contractdate',$from, $to, 'AND'); 
} 
else { 
    $criteria->addBetweenCondition('schoolstudents.createddate',$from, $to, 'AND'); 
} 

所以,当我选择“R”,它正确contractdate之间的搜索,并返回我想要的结果。当我选择其他选项时,如何才能比较两个表格并只返回未注册的学生?从本质上讲,现在我的查询要么返回已注册的学生,要么全部返回。

+0

您可以添加整个'cdbcriteria'代码吗? – Criesto

+0

我发布了解决方案。我认为它的作品!感谢你的回答 – thr

回答

0

没关系我想我想通了!我将我的代码更改为:

if ($this->filter=='R'){ 
     $criteria->addBetweenCondition('contractdate',$from, $to, 'AND'); 
} 
else { 
    $criteria2 = new CDbCriteria(); 
    $criteria2->with = 'contracts'; 
    $criteria2->condition = 'contractdate IS NULL'; 
    $criteria->addBetweenCondition('schoolstudents.createddate',$from, $to, 'AND'); 
    $criteria->mergeWith($criteria2);//for filtering based on unregistered students