2014-01-13 15 views
0

멍청한 질문에 대해 유감스럽게 생각하지만, 왜 내가 기대하고있는 것을 반환하지 않는지 이해할 수 없습니다. 기본적으로 사용자의 시작과 끝이 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

관련 문제