cakephp,保存同一模型的多行

时间:2014-01-28 13:20:19

标签: php cakephp-2.0 cakephp-appmodel

我想知道如何在一个视图中保存,例如4天的日程安排,并且如果验证失败,则会显示每个字段验证消息。

我的方法最初是使用$this->SomeModel->saveAll()但无法保存,因此我尝试使用foreach的其他方式并保存所有数据(通过验证),但未显示验证消息。如果你们知道更好的方法,我可以提出任何建议。

模型

public $validate = array(
    'hour_from'=>array(
        'some mgs' => array(
            'rule'    => 'good_hours',
        ),
    ),
);
public function good_hours($data) {
    //throw new Exception(($data['hour_from'] >= $this->data['Hour']['hour_to']));
    if ($data['hour_from'] >= $this->data['Hour']['hour_to']) {
        return false;
    }
    return true;
}

控制器:

if ($this->request->is('post')) {
        $all_good = true;
        foreach ($this->request->data['Hour'] as $day){

            if ($this->Hour->save($day)){

            }else {
                $all_good = false;
                $this->Session->setFlash('hours not saved');
            }
        }
        //if all saves are correct rediredt to index 
        if ($all_good) {
            $this->Session->setFlash(__('Hours saved'));
            return $this->redirect(array('action' => 'index'));
        }
    }

查看

    foreach ($days as $count => $day):
$form_model ='Hour.'.$count. '.';
?>
<fieldset>
    <legend><?php
    $day_array = (array) $day;
    $day = $day_array['date'];
    echo $day;
    ?></legend>
<?php
    echo $this->Form->input($form_model.'type_holiday_id', array(
    'label'=> 'Typ urlopu',
    'type'    => 'select',
    'options' => $type_holidays,
    'empty'   => true
    ));
    echo $this->Form->input($form_model.'hour_from', array('label' => 'od'));
    echo $this->Form->input($form_model.'hour_to', array('label' => 'do'));
    echo $this->Form->input($form_model.'date', array('type' => 'hidden', 'value' => $day));
    echo $this->Form->input($form_model.'subordinate_id', array('type' => 'hidden', 'value' => $user['User']['id']));
    echo $this->Form->input($form_model.'supervisor_id', array('type' => 'hidden', 'value' => $current_user['id']));

?>
</fieldset>

请求 - &gt;数据数组

Hour(array)
0(array)
   type_holiday_id
   hour_from 8
   hour_to 15
   date 2014-01-20
   subordinate_id 193
   supervisor_id 557
1(array)
   type_holiday_id
   hour_from 7
   hour_to 14
   date 2014-01-21
   subordinate_id 193
   supervisor_id 557

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案,一切现在在控制器中完美运行我需要将save更改为saveAll,Controller中的函数add应如下所示:

if ($this->request->is('post')) {
        if ($this->Hour->saveAll($this->request->data['Hour'], Array('validate' => 'first', 'deep' => true))){ <--- most important is that data['Hour']
            $this->Session->setFlash(__('Godziny robocze zapisane')); 
            return $this->redirect(array('action' => 'index'));
        } else{
            $this->Session->setFlash('Godziny robocze nie zostały zapisane.');
        }
    }