更新CakePHP中的行

时间:2013-03-22 04:55:56

标签: cakephp cakephp-2.3

我试图更新cakePHP 2.3.1中的一行。我有类使用$ validates数组测试扩展AppModel, 和控制器(简化):

public function editstudent()   {
    if($this->request->data)    {
        $this->Test->stuId= $this->data['Test']['stuId'];
        if ($this->Test->save($this->request->data))    {
            $this->set('state',1);
        }
    }

这本书说:

  

创建或更新由模型的id字段控制。如果设置了$ Model-> id,则更新具有此主键的记录。否则会创建一条新记录:

如上所述,我设置了$ this-> Test-> StuId,但是当我提交表单时,它仍显示:

  

错误:SQLSTATE [23000]:完整性约束违规:1062密钥'PRIMARY'重复输入''   SQL查询:INSERT INTO ........

如错误所示,查询仍然是INSERT而不是UPDATE 那么我需要做些什么来更新,请帮助我:(

编辑:@thaJeztah我编辑了我的观点:

class Test extends AppModel {
var $name= 'Test';
var $primaryKey= 'stuId';
public $validate= array(.......);
}

但它仍然显示同样的问题

  

数据库错误   错误:SQLSTATE [23000]:完整性约束违规:1062密钥'PRIMARY'的重复条目''   SQL查询:INSERT INTO cakePhptestsstuNamestuDoBstuAdd)VALUES('ĐàoĐứcAnh','2013-03-25' ,'KimLiên')

如您所见,查询仍然是INSERT而不是更新,您能否帮助我为什么会这样:(

1 个答案:

答案 0 :(得分:2)

因为您没有遵循CakePHP约定(请参阅CakePHP Model Conventions,您需要手动指定要用于模型的主键和/或数据库表;

class Test extends AppModel {
    public $primaryKey = 'studId';
}

此外,我想知道'Test'是否为保留名称,可能根本不是该模型的正确名称。

但是,如果这是一个新项目,我会强烈建议坚持CakePHP惯例,它们是有原因的,并且在使用这个框架开发时会让生活变得更轻松

<强>更新 根据OP的评论

删除了$useTable属性