0

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

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 cakePhptests( stuName, stuDoB, stuAdd) 价值观 ('Đào Đức Anh', '2013-03-25', 'Kim Liên')

如您所见,查询仍然是插入而不是更新,您能帮我解释为什么仍然会发生这种情况:(

4

1 回答 1

2

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

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

另外,我想知道“测试”是否是保留名称,可能根本不是模型的专有名称。

但是,如果这是一个新项目,我强烈建议您遵守 CakePHP 约定,它们的存在是有原因的,并且在使用该框架进行开发时会使生活变得更加轻松

更新$useTable根据 OP 的评论 删除了该属性

于 2013-03-22T07:28:33.330 回答