如何在cakephp中更新记录

wno*_*eno 3 php cakephp

这是编辑的代码

function edit($id){

    if(!empty($this->data)) {
        if($this->Article->save($this->data)) {
            pr($this->Article);
            $this->Session->setFlash("Article Saved!");
            $this->redirect('/articles/view');        
            }    
    }
    else    
        $this->data = $this->Article->findByArticleId($id);

}
Run Code Online (Sandbox Code Playgroud)

并为了观点

<?php 
echo $form->create('Article', array('type' => 'post','action'=>'edit')); 
?>

<table>
<tr><td>Edit Article</td></tr>
<tr><td>Title: </td><td><?php echo $form->text('article_title',array('label'=>false,'type'=>'text','size'=>50)); ?></td></tr>
<tr><td>Text: </td><td><?php echo $form->textarea('article_text',array('label'=>false,'class'=>'ckeditor','columns'=>100,'row'=>8,'width'=>100));?></td></tr>
<tr><td>Published: </td><td><?php echo $form->radio('article_published',array('1'=>'Yes','0'=>'No'),array('legend'=>false));?></td></tr>
</table>
<?php echo $form->end('Save'); ?>
Run Code Online (Sandbox Code Playgroud)

问题是它总是添加新记录而不是更新当前记录.我该怎么解决?

Mik*_*ike 10

插入新记录的原因是CakePHP方法不知道您正在编辑的记录的ID.基本上,当传递给save()方法的数据不包含记录ID或表中不存在ID时,save()将插入新记录而不是更新现有记录.

解决此问题的通常方法是添加echo $form->input('id');表单.这将添加一个隐藏字段,其中包含正在编辑的记录的ID到表单.此时启用安全组件是个好主意,因为它可以帮助您防止篡改表单数据.