2012-02-14 8 views
0

cakephpの他の行との検証行 他の「日付範囲」値を保存するには、「日付範囲」を検証する必要があります。 このようなもの:cakephpの他の行との検証行

function dateNotColision($check) { 

       foreach($this->data[$this->name] as $row){ 
        if(($row['date_start']>=$date_start && $date_start<=$row['date_end']) || 
         ($row['date_start']>=$date_end && $date_end<=$row['date_end'])){ 
         return false; 
        } 
       } 

     return true; 
    } 

どうすればいいですか?あなたの検証配列内の

答えて

0
public function customDateValidation($field) { 
    return ($this->data[$this->alias]['date_start'] >= $date_start && $this->data[$this->alias]['date_end'] <= $date_start) || ($this->data[$this->alias]['date_start'] >= $date_end && $this->data[$this->alias]['date_end'] <= $date_end) 
} 

ちょうど最後に私は、このやった

'start_date' => array(
    'rule' => 'customDateValidation', 
    'message' => 'wrong dates' 
) 
+0

この検証は同じ行で実行されますが、他の行は検証されません。 – jonathan

0

のようなものを設定:モデルで

:コントローラで

public $validate = array(
         'date_start' =>array('rule'=>'dateNotColision', 
               'message' => 'Date Colision' 
              ), 
          'date_end' =>array('rule'=>'dateNotColision', 
              'message' => 'Date Colision' 
              ) 
        ); 

    var $dataArray=array(); 

    public function setDataArray($array){ 
     $this->dataArray=$array; 
    } 

    function dateNotColision($check) { 

       foreach($this->dataArray as $row){ 
        if(($row['date_start']>=$check && $check<=$row['date_end'])){ 
         return false; 
        } 
       } 

     return true; 
    } 

$this->Hotel->Season->setDataArray($this->request->data['Season']); 
foreach($this->request->data['Season'] as $reviewData){ 
     $this->Hotel->Season->saveAssociated($reviewData);        
}