我有两个表。合同和学生。我有两个自定义过滤器。当我选择Registered筛选器时,我的查询返回正确的行。但是当我选择Unregistered过滤器时,我想返回Unregistered的学生。现在它返回所有的学生。我的查询是这样的:
if ($this->filter=='R'){
$criteria->addBetweenCondition('contractdate',$from, $to, 'AND');
}
else {
$criteria->addBetweenCondition('schoolstudents.createddate',$from, $to, 'AND');
}
因此,当我选择'R'时,它在contractdate
之间正确搜索,并返回我想要的结果。当我选择另一个选项时,我如何在两个表之间进行比较并只返回未注册的学生?实际上,现在我的查询要么返回注册学生,要么返回所有学生。
没关系,我想我弄明白了!我把代码改成这样:
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