4

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

4

2 回答 2

9

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

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

如果它不存在,您应该添加它。这可以确保您保存的对象的 id 存在于发送到控制器然后发送到模型的数据中,因此它不会在数据库中创建新记录。

于 2013-05-01T12:11:59.530 回答
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 字段回显到表单中,它都不会在其“值”属性中包含 id,并且当请求返回到操作函数时,您的保存代码将不知道怎么做,相反它会创造一个新的记录。

于 2013-09-06T16:18:46.900 回答