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