CakePHP2,编辑表单会创建一个新记录,而不是更新它
我使用控制台蛋糕烘焙从数据库自动生成表单。CakePHP2,编辑表单会创建一个新记录,而不是更新它,cakephp,Cakephp,我使用控制台蛋糕烘焙从数据库自动生成表单。 但是我有一个问题,我的一个控制器没有在编辑记录后更新它,而是在数据库中创建一个新记录。如果您使用控制台烘焙视图,您的编辑表单应该有以下行: echo $this->Form->input('id'); $this->request->data = $this->Model->findById($id); 如果它不存在,您应该添加它。这样可以确保发送到控制器然后再发送到模型的数据中存在您要保存的对象的id,因此不会
但是我有一个问题,我的一个控制器没有在编辑记录后更新它,而是在数据库中创建一个新记录。如果您使用控制台烘焙视图,您的编辑表单应该有以下行:
echo $this->Form->input('id');
$this->request->data = $this->Model->findById($id);
如果它不存在,您应该添加它。这样可以确保发送到控制器然后再发送到模型的数据中存在您要保存的对象的id,因此不会在数据库中创建新记录。另一个可能的问题来源是表单数据不在请求中。您的更新功能可能如下所示:
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);
}
}
过去我因为忘记这句话而陷入麻烦:
echo $this->Form->input('id');
$this->request->data = $this->Model->findById($id);
在条件的第二种情况下。如果您忘记了这一点,那么无论您是否将隐藏的id字段回显到表单中,它都不会在其“value”属性中包含id,并且当请求返回到操作函数时,您的保存代码将不知道如何处理它,相反,它将创建一个新记录。在保存/更新表单之前传递表行
id
,如$this->modelName->id