在我的视图(/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()