1

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

/查看/测试/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');

/控制器/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,现在第一个第二个输入以正确的顺序值出现。

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

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

4

1 回答 1

3

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

从部分引用saveMany()

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

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

也不Controller::referer()是静态方法使用$this->referer()

于 2013-04-21T06:46:15.780 回答