CakePHP:使用saveMany()形成帮助器,一次编辑多行

时间:2013-04-21 03:37:57

标签: php cakephp cakephp-2.1

在我的视图中(/View/Tests/admin_edit.ctp)我想通过将表单指向QsetsController和" admin_order"来编辑多行(来自不同的模型)。然后,操作使用saveMany($this->request->data)更新所有更改。

/View/Tests/admin_edit.ctp:

echo $this->Form->create( 'Qset', array('action'=>'order', 'admin'=>1));
$n = 1;
foreach ($qsets as $qset) : ?>
        <h3>Question set <?php echo $n; $n++;?></h3>
        <?php echo $this->Form->input('Qset.'.$n.'.order'); ?>
        <?php echo $this->Form->input('Qset.'.$n.'.id', array('type'=>'hidden') ); ?>
        ...
        $n++;

    endforeach;

echo $this->Form->end('save');

/Controller/QsetsController.php

public function admin_order() {

    $data = $this->request->data; //maybe just $this->data ?

    $this->Qset->saveAll($data);
    $this->Session->setFlash( "Order saved.");
    $this->redirect( Controller::referer() );
}

目前,我的数据未保存(尽管没有错误)。 此外,只有foreach循环回显的 first 输入才会显示正确的order字段值。后续的每一个都没有任何价值。

更新 我将$n = 1更改为$n = 0,现在第一个 AND 第二个输入显示正确的订单值。

UPDATE2: 表单的标记开头如下:

<form action="/admin/qsets/order" id="QsetOrderForm" method="post" accept-charset="utf-8">

输入字段的标记显示正确:

<div class="input number"><label for="Qset2Order">Order</label>
<input name="data[Qset][2][order]" type="number" value="3" id="Qset2Order">
</div>

为空输入字段生成的标记:

<div class="input number"><label for="Qset3Order">Order</label>
<input name="data[Qset][3][order]" type="number" id="Qset3Order">
</div>

UPDATE3: 我解决了输入无法正确显示的问题!注意我在回显输入之前递增$n ,因此这在循环结束时创建了重复项。我在输入后移动了$n++,现在它们显示正确。唷。现在我只需要让他们保存。

有用的参考文献:
Cake book chapter on saveMany()/saveAll()
Similar question

1 个答案:

答案 0 :(得分:3)

您参考了手册,但可能还读得不够:)

引自saveMany()的部分:

  

请注意,我们传递数字索引而不是通常的$ data   包含Article键。保存同一模型的多个记录时   记录数组应该只是数字索引而没有   模型键。

而不是$data$data['Qset']传递给saveAll()/ saveMany()。

同样Controller::referer()不是使用$this->referer()

的静态方法