2015-09-04 56 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