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


CakePHP: Form helper with saveMany() to edit multiple rows at once

在我的视图(/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循环响应的第一个输入显示为具有正确的order字段值。后面的每一个都没有任何价值。

更新:我将$n = 1更改为$n = 0,现在第一个and第二个输入显示为正确的顺序值。

更新2:表单的标记如下所示:

<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>

更新3:我解决了输入显示不正确的问题!请注意,在回显输入之前,我递增了$n,所以这是在循环结束时创建重复项。我将$n++移到输入之后,现在它们显示正确。Phew。现在我只需要让他们去救。

有用的参考资料:
关于saveMany((/saveAll((的蛋糕书章节
类似问题

您参考了手册,但可能没有读得足够好:(

引用saveMany():部分

请注意,我们传递的是数字索引,而不是通常的$数据包含文章密钥。保存同一型号的多条记录时记录数组应该只进行数字索引,而不使用模型密钥。

因此,将$data['Qset']传递给saveAll((/saveMany((,而不是$data

此外,Controller::referer()不是一种静态方法—使用$this->referer()