我试图更新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
cakePhp
。tests
(stuName
,stuDoB
,stuAdd
)VALUES('ĐàoĐứcAnh','2013-03-25' ,'KimLiên')
如您所见,查询仍然是INSERT而不是更新,您能否帮助我为什么会这样:(
答案 0 :(得分:2)
因为您没有遵循CakePHP约定(请参阅CakePHP Model Conventions,您需要手动指定要用于模型的主键和/或数据库表;
class Test extends AppModel {
public $primaryKey = 'studId';
}
此外,我想知道'Test'是否为保留名称,可能根本不是该模型的正确名称。
但是,如果这是一个新项目,我会强烈建议坚持CakePHP惯例,它们是有原因的,并且在使用这个框架开发时会让生活变得更轻松
<强>更新强> 根据OP的评论
删除了$useTable
属性