在我的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());
}
在发布之前,我花了两个小时在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
答案 0 :(得分:1)
问题在于数据库中的数据。 cakephp IRC频道上的那些人提请我注意这样一个事实:在大多数数据库中,ID = 0等于'新记录'。出于某种原因,我有一个ID为0的选项,所以在更新底层的mysql查询时实际创建了一条新记录。 更改了ID,修复了问题。
答案 1 :(得分:0)
我看到您的代码的主要问题是您的字段(无线电和输入)都是使用ID值作为第一个参数构建的。构建字段的正确“蛋糕方式”是第一个参数是Model.fieldname,在您的情况下我认为它将是$ form-&gt; input('Option.id',array())?&gt;
如果您检查代码生成的html,您会看到字段名称是data [id],如果您想循环遍历$ this-&gt; data ['Option,它应该是数据[Option] [id] ']在您的控制器中。
尝试更改代码以包含Model.fieldname作为第一个参数,然后它应该将数据正确提交给您的控制器。