在我的視圖(/View/Tests/admin_edit.ctp)中,我想通過將表單指向QsetsController來編輯多行(來自不同的模型), 「admin_order」操作然後使用saveMany($this->request->data)
更新所有更改。CakePHP:使用saveMany()形式助手一次編輯多行
/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
現在第一和秒輸入顯示,其正確的順序值。
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
確定。我會在控制器中嘗試一下。任何想法爲什麼表單助手不能正確創建所有輸入? – emersonthis 2013-04-21 12:50:42
該修改後表單仍然無法正常工作,但可能是因爲視圖沒有正確發送數據。顯然有些東西是不正確的,因爲只有一些輸入字段填充了正確的值。 – emersonthis 2013-04-21 12:55:30
那麼你只顯示任何代碼如何爲admin_edit視圖填充'$ this-> request-> data'。您的投入如何填充將取決於此。 – ADmad 2013-04-21 15:25:18