2014-01-13 72 views
0

對於noob問題感到抱歉,但我不明白爲什麼它不會返回我期待的內容。基本上,它只是查看用戶的開始和結束是否在每個ID存在的日期之間,不是?自定義驗證條件在yii

public function date_range($attribute, $params) 
{ 
    $model= Table::model(); 
    $criteria = new CDbCriteria; 

    $criteria->compare('id',$this->id); 
    $criteria->addCondition('start_date < '.$this->start_date); 
    $criteria->addCondition('end_date > '.$this->end_date); 

    $record = $model->findAll($criteria); 

    if($record==true) 
    $this->addError('id', 'Item already exists within range.'); 

} 
+0

條件看起來沒問題,結果如何提取與預期不同? – Rohan

+0

它保存在範圍內...而我期待錯誤。 :/ – jaime

回答

0

,你可以把這個函數的內容像beforeValidate()一個更好的地方,然後返回你的錯誤。

public function beforeValidate() 
{ 

    $criteria = new CDbCriteria; 

    $criteria->compare('id',$this->id); 
    $criteria->addCondition('start_date < '.$this->start_date); 
    $criteria->addCondition('end_date > '.$this->end_date); 

    $record = Table::model()->exist($criteria); // I checked for existance 

    if(!empty($record)) // if there are records 
    { 
     $this->addError('id', 'Item already exists within range.'); 
     return false; 
    } 
    return parent::beforeValidate();//don't forget this line 
} 
+0

它仍在範圍內保存。 :/ – jaime

+0

'$ this-> start_date'是什麼? – tinybyte

+0

來自用戶的開始日期...不是? – jaime