在cakephp中编辑和保存多条记录

在cakephp中编辑和保存多条记录,cakephp,records,Cakephp,Records,在我的cakephp应用程序中,我有一个选项模型 在我的选项/索引视图中,我显示2个带有输入和单选按钮字段的选项。 我想更新他们两个,但我有一个奇怪的行为 我更改的选项不会被保存,而是用新值插入一个新选项 这是我的看法 <h2 class='page-title' id='manage-options'>Opzioni</h2> <?php echo $form->create(null, array('action'=>'index')); ?>

在我的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(); ?>
在这里发布之前,我花了两个小时在谷歌上搜索答案并进行实验。我了解
saveAll()
,并且我尝试过以下解决方案:

我一直在调整我的代码以适应这些模式,但我没有得到任何结果(在“不工作”和“不工作,我得到一个额外的记录”之间摆动),所以我决定发布我的原始代码

你能帮我指出最合适的方法吗? 奇尔斯,
Davide

我看到您的代码的主要问题是,您的字段,包括收音机和输入,都是以ID值作为第一个参数构建的。构建字段的正确“蛋糕方式”是第一个参数是Model.fieldname,在您的例子中,我相信它应该是$form->input('Option.id',array())?>

如果您检查由代码生成的html,您将看到字段名是data[id],如果您想在控制器中循环通过$this->data['Option],它应该是data[Option][id]


尝试更改代码以将Model.fieldname作为第一个参数,然后它应该将数据正确提交给控制器

问题在于数据库中的数据。cakephp IRC频道的好心人提醒我注意,在大多数数据库中,ID=0等于“新记录”。出于某种原因,我有一个ID为0的选项,因此在更新参考底图mysql查询时,实际上创建了一条新记录。
已更改ID,问题已解决。

第一个参数不是ID,而是数组索引,指向结果数组的第n个元素。此外,生成的输入字段完全正确(data[Option][id])。无论如何,谢谢你的建议,但它不适用。
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());
}