【问题标题】:CakePHP: Form helper with saveMany() to edit multiple rows at onceCakePHP:使用 saveMany() 一次编辑多行的表单助手
【发布时间】:2013-04-21 03:37:57
【问题描述】:

在我看来 (/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 第二个输入出现了正确的顺序值。

更新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++ 移到输入之后,现在它们显示正确。呸。现在我只需要让他们保存。

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

【问题讨论】:

    标签: php cakephp cakephp-2.1


    【解决方案1】:

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

    引用saveMany()的部分:

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

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

    另外Controller::referer()不是静态方法使用$this-&gt;referer()

    【讨论】:

    • 好的。我会在控制器中尝试一下。知道为什么表单助手没有正确创建所有输入吗?
    • 修改后表单仍然无法工作,但可能只是因为视图没有正确发送数据。显然有些地方不正确,因为只有一些输入字段填充了正确的值。
    • 好吧,您只展示了如何为 admin_edit 视图填充 $this-&gt;request-&gt;data 的任何代码。如何填充您的输入将取决于此。
    • 我发现了表单输入的错误(参见上面的 update3)。我现在可以让值正确显示。但是现在控制器即使在控制器中更改为 $data['Qset'] 后仍然无法正常工作
    • 在保存之前在控制器中显示debug($data['Qset'])的输出。
    猜你喜欢
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多