2014-01-13 41 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