我使用控制台蛋糕烘焙从数据库自动生成表单。 我有一个问题,我的一个控制器,而不是在编辑后更新记录,是在数据库中创建一个新记录。
答案 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函数时,您的保存代码将不会知道该怎么做,相反它会创造一个新的记录。