0

在我的 cakephp 应用程序中,我有一个 Option 模型。

在我的选项/索引视图中,我显示了 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());
}   

在这里发帖之前,我花了两个小时在谷歌上搜索答案并进行实验。我知道saveAll()并尝试过以下解决方案:

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

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

你能帮忙,指出最合适的方法吗?干杯,戴维德

4

2 回答 2

1

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

于 2009-08-27T07:55:24.843 回答
0

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

如果您检查代码生成的 html,您将看到字段名称是 data[id],如果您想在您的 $this->data['Option']控制器。

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

于 2009-08-13T19:50:48.877 回答