2009-08-13 54 views
0

在我的cakephp應用程序中,我有一個選項模型。編輯並保存cakephp中的多條記錄

在我的選項/索引視圖中,我顯示2個選項,包含輸入和單選按鈕字段。 我想更新他們兩個,但我得到一個奇怪的行爲。

我修改的選項沒有被保存,而是插入一個新的選項和新的值。

這是我的看法

<h2 class='page-title' id='manage-options'>Opzioni</h2> 
<?php echo $form->create(null, array('action'=>'index')); ?> 
<table> 
    <tr> 
    <td><?= $options[0]['Option']['name']?></td> 
    <td><?= $form->radio( 
        $options[0]['Option']['id'], 
        array( 
         '1' => 'Sì', 
         '0' => 'No'), 
       array('default'=> $options[0]['Option']['value'], 'legend'=>false) 
    );?> 
     </td> 
    </tr> 
    <tr> 
     <td><?= $options[1]['Option']['name']?></td> 
    <td><?= $form->input($options[1]['Option']['id'],array('label'=>false,'value' => $options[1]['Option']['value']))?></td> 
    </tr>          
</table>  
<?php echo $form->submit('Salva'); ?> 
<?php echo $form->end(); ?> 

而且我的控制器:

function index() { 
    if (!empty($this->data)) { 
     foreach($this->data['Option'] as $id => $value) : 
      $this->Option->id = $id;  
      $feedback = $this->Option->read(); 
      $this->Option->saveField('value', $value); 
     endforeach;   
     $this->Session->setFlash('Opzioni aggiornate'); 
    } 
    $this->Option->recursive = 0; 
    $this->set('options', $this->paginate()); 
} 

前張貼在這裏,我花了兩個小時google搜索答案和試驗。我知道saveAll(),我已經嘗試了這些解決方案:

http://planetcakephp.org/aggregator/items/2172-cakephp-multi-record-forms http://teknoid.wordpress.com/2008/10/27/editing-multiple-records-with-saveall/

我一直在調整我的代碼,以適應這些模式,但我之間「不工作」和「沒有工作,沒有得到結果(振盪我得到一個額外的記錄'),所以我決定發佈我的原始代碼。

你能幫忙嗎,指出最合適的方式來做到這一點? Cheeers, Davide

回答

1

問題出在數據庫中。 cakephp IRC頻道上的親友稱我注意到,在大多數數據庫中ID = 0等於「新記錄」。出於某種原因,我有一個選項ID 0,所以當更新底層的MySQL查詢實際上創建了一個新的記錄。 更改了ID,解決了問題。

0

我看到的代碼的主要問題是,您的字段(包括收音機和輸入)僅使用ID值作爲第一個參數構建。建立一個字段的正確的「蛋糕方式」是第一個參數是Model.fieldname,在你的情況下,我相信它會是$ form-> input('Option.id',array())?>

如果你檢查你的代碼生成的html,你會看到字段名稱是data [id],如果你想在你的$ this-> data ['Option']中循環,它應該是data [Option] [id]控制器。

嘗試更改代碼以包含Model.fieldname作爲第一個參數,然後它應該將數據正確提交到您的控制器。

+0

第一個參數不是ID,它是一個數組索引,指向結果數組的第N個元素。此外,生成的輸入字段是完全正確的(data [Option] [id])。無論如何感謝您的建議,但它不適用。 – nutsmuggler 2009-08-17 07:48:11