2009-08-13 116 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