2015-12-28 2 views
0

Может ли какой-либо орган узнать, как проверить несколько записей для одного поля. Мне нужно проверить и сохранить данные в таблице DB. Я попытался использовать метод правил проверки, который мы обычно используем для проверки данных, но функция проверки возвращает 1, то есть True вместо ошибки. Кроме того, я вложил правила проверки в дополнительный массив, чтобы он не работал.Как проверить несколько записей для одного поля в cakephp

Просьба направлять меня для проверки данных для нескольких записей.

контроллер код

$this->MyModel->set($this->request->data); 
if($this->MyModel->validates()){ 
    //Some code 
}else{ 
    pr($this->MyModel->validationErrors); 
} 

выход представленной формы:

Array 
(
    [MyModel] => Array 
     (
      [0] => Array 
       (
        [qualification_id] => 
        [stream] => 
        [pass_year] => 
        [description] => 
        [resume_id] => 1 
       ) 
      [1] => Array 
       (
        [qualification_id] => 
        [stream] => 
        [pass_year] => 
        [description] => 
        [resume_id] => 1 
       ) 

     ) 

) 

правила проверки MyModel:

public $validate = array(
     array(
      'resume_id' => array(
      'notEmpty'=>array(
       'rule' => 'notEmpty', 
       'message' => 'Invalid resume reference.' 
      ), 
      'numeric' => array(
       'rule' => 'numeric', 
       'message' => 'Invalid resume reference.' 
      ) 
     ), 
     'qualification_id' => array(
      'notEmpty'=>array(
       'rule' => 'notEmpty', 
       'message' => 'Please enter qualification.' 
      ), 
      'numeric' => array(
       'rule' => 'numeric', 
       'message' => 'Invalide qualification selected' 
      ) 
     ) 
     ) 
    ); 

Спасибо,

Параг C.

ответ

0

Я нашел решение, поскольку Иниго Флорес сказал, что Model::validateMany() помогает, но в моем случае Model::validateMany() не работает. Поэтому я переопределен метод в моей модели

код модели:

public function validateMany(&$data, $options = array()) { 
     $validationErrors = array(); 
     foreach ($data[$this->alias] as $key => $values) { 
      $this->set($values); 
      if (!$this->validates($values)) {     
       $validationErrors[$this->alias][$key] = $this->validationErrors;     
       foreach ($this->validationErrors as $field => $msg) { 
        $validationErrors[$this->alias][$key][$field]['message'] = $msg[0]; 
       } 
      } 
     } 
     if (!empty($validationErrors)) { 
      unset($this->validationErrors); 
      $this->validationErrors = $validationErrors; 
      return false; 
     } else { 
      return true; 
     } 
    } 

Я использовал $this->validates() метод CakePHP для проверки каждого массива

CTP код для каждого поля формы:

<?php 
$isError = false; 
if (!empty($errors['MyModel'][$index]['qualification_id']['message'])) { 
    $isError = true; 
} 
?> 
<div class="col-lg-4<?php echo ($isError) ? ' error' : ''; ?>"> 
    <?php 
    echo $this->Form->label(_('Qualification')); 
    echo $this->Form->select('MyModel.' . $index . '.qualification_id', $qualifications, array('div' => false, 'required' => false, 'empty' => 'Please select', 'class' => 'form-control', 'maxlength' => 80)); 
    echo ($isError) ? '<span>' . $errors['MyModel'][$index]['qualification_id']['message'] . '</span>' : ''; 
    ?> 
</div> 

Это немного долгий процесс, но он разрешил мою проверку.

Спасибо, Параг C.

2

Model::validates() может обрабатывать только одну запись, которая ранее была установлена ​​с Model::set().

Если вы хотите проверить несколько записей, вы должны использовать Model::validateMany().

Это может быть реализовано как:

$data = $this->request->data; //to prevent $this->request->data from being altered. 
if($validationErrors=$this->MyModel->validateMany($data)){ 
    //Some code 
}else{ 
    pr($validationErrors); 
} 

См Model::validateMany() в 2.x API CakePHP.

+0

Благодаря Иниго, я попробовал эту модель :: validateMany(), но он не проверяет мои данные. Поэтому я переопределил Model :: validateMany(). Я обновлю свой ответ в этом сообщении. –

+0

Спасибо Иниго, этот ответ помогает мне в той же ситуации. –

Смежные вопросы