cakephp 2,编辑表单创建一个新记录而不是更新它

时间:2013-05-01 11:57:35

标签: cakephp

我使用控制台蛋糕烘焙从数据库自动生成表单。 我有一个问题,我的一个控制器,而不是在编辑后更新记录,是在数据库中创建一个新记录。

2 个答案:

答案 0 :(得分:9)

如果您使用控制台烘焙视图,则您的编辑表单应该包含以下行:

echo $this->Form->input('id');

如果不存在,则应添加它。这可确保您保存的Object的id存在于发送到Controller的数据中,然后发送到Model,因此它不会在数据库中创建新记录。

答案 1 :(得分:1)

可能出现问题的另一个原因是表单数据不在请求中。您的更新功能可能如下所示:

function update($id=null) {

    //if the data has come back from the form...
    if($this->request->is('post') || $this->request->is('put')) {

        //Your saving code goes here.

    } 

    //else, the form is being requested initially, and the id is coming through
    //as a get parameter.
    else {

    $this->request->data = $this->Model->findById($id);

    }

}

我忘了这句话,过去遇到了麻烦:

$this->request->data = $this->Model->findById($id);

在有条件的第二种情况下。如果您忘记了,那么无论您是否将隐藏的id字段回显到表单,它都不会在其“value”属性中包含id,并且当请求返回到action函数时,您的保存代码将不会知道该怎么做,相反它会创造一个新的记录。