2013-04-21 100 views
1

在我的視圖(/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

回答

3

您參考手冊,但可能還沒有讀它不夠好:)

從部分報價爲saveMany()

注我們是通過數字指數而不是通常的$ data 包含文章鍵。當保存同一型號的多個記錄 時,記錄數組應僅用數字索引,而不使用 型號密鑰。

所以不是$data$data['Qset']到白水回收()/ saveMany()。

另外Controller::referer()不是靜態方法使用$this->referer()

+0

確定。我會在控制器中嘗試一下。任何想法爲什麼表單助手不能正確創建所有輸入? – emersonthis 2013-04-21 12:50:42

+0

該修改後表單仍然無法正常工作,但可能是因爲視圖沒有正確發送數據。顯然有些東西是不正確的,因爲只有一些輸入字段填充了正確的值。 – emersonthis 2013-04-21 12:55:30

+0

那麼你只顯示任何代碼如何爲admin_edit視圖填充'$ this-> request-> data'。您的投入如何填充將取決於此。 – ADmad 2013-04-21 15:25:18