2013-03-22 50 views
0

我試着去更新在CakePHP 2.3.1.I一排有Test類擴展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); 
     } 
    } 

書中說:

Creating or updating is controlled by the model’s id field. If $Model->id is set, the record with this primary key is updated. Otherwise a new record is created:

正如上面我已經設置$這個 - >測試 - > StuId但是當我提交表單它仍然顯示:

Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'PRIMARY' SQL Query: INSERT INTO ........

作爲錯誤顯示,查詢仍然被夾不更新 那麼我一定要做到及時更新,請幫我:(

編輯:@thaJeztah我已經編輯我的看法是這樣的:

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

但它仍然顯示了同樣的問題

Database Error Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 'PRIMARY' SQL Query: INSERT INTO cakePhp . tests (stuName , stuDoB , stuAdd) VALUES ('Đào Đức Anh', '2013-03-25', 'Kim Liên')

正如你所看到的查詢仍在INSERT不更新,你可以幫我爲什麼仍然發生:(

+0

的評論刪除$useTable屬性您的'tests'表的結構如何? – dhofstet 2013-03-22 07:04:31

+0

'tests'表有5個字段: 主鍵:stuId和4個字段:stuName,stuSex,stuDoB,stuAdd – 2013-03-22 10:51:04

回答

2

由於您沒有遵循CakePHP約定(請參閱CakePHP Model Conventions,您將需要手動指定要用於模型的主鍵和/或數據庫表;

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

此外,我不知道'測試'是一個保留名稱,可能不是模型的專有名稱。

但是,如果這是一個新的項目,我會強烈建議堅持CakePHP的約定,他們是有原因的,將讓生活輕鬆了許多與此框架

更新開發時 根據OP

+0

我沒有明白你的意思。因爲我知道關於蛋糕約定,類Test擴展AppModel將堅持表格在數據庫中測試,所以我不需要像上面的代碼那樣指出它? – 2013-03-22 10:50:19

+0

好的,如果你的表名爲'test',你可以刪除'useTable'屬性,但是,如果你的主鍵不是'id'而是'studId',那麼你應該指定這個。 – thaJeztah 2013-03-22 11:03:34

+0

這意味着cakePhp將無法檢測到自己的表中主鍵是什麼?我沒有想到這個,男士。 – 2013-03-22 11:04:58