2013-10-04 83 views
2

我想更新CakePHP的方式 數據庫,這是我的控制器CakePHP - 爲什麼Model :: save cause()是INSERT而不是UPDATE?

$data = array(
'KnowledgeBase' => array(
'kb_title' => $this->data['KnowledgeBase']['kb_title'], 
'kb_content' => $this->data['KnowledgeBase']['kb_content'] 
'kb_last_update' => date("Y-m-d G:i:s"), 
'kb_segment' => $this->data['KnowledgeBase']['kb_segment'] 
)); 
$this->KnowledgeBase->id_kb = $this->data['KnowledgeBase']['id_kb']; 
$this->KnowledgeBase->save($data); 

假設我有崗位的形式是真的,當我執行程序 我有一些錯誤是這樣的:

Database Error 

Error: SQLSTATE[23000]: [Microsoft][SQL Server Native Client 10.0] 
[SQL Server]Violation of PRIMARY KEY constraint 'PK_cnaf_kb'. 
Cannot insert duplicate key in object 'dbo.cnaf_kb'. 

SQL Query: INSERT INTO [cnaf_kb] ([kb_judul], [kb_segment], [kb_isi], [id_kb], [kb_last_update], [kb_status]) VALUES (N'HARRIS TEST 4 ', N'4', N'<p>TESSSSSSSSSSSSSSSSSSSSSS</p> ', 73, 
'2013-10-04 16:57:00', 1) 

爲什麼函數使用插入查詢?沒有更新?

注:我不是使用形式幫手後到控制器,我使用CakePHP 2.3.8版本和SQL Server 2008數據庫

對不起我的英文不好,我希望有人能幫助我:(((

回答

4

你不提供主鍵值,這就是原因。

無論你的主鍵名爲什麼(Model::$primaryKey),該模型對象,你有,如果你使用id屬性(Model::$id)想要設置主鍵值。

$this->KnowledgeBase->id = $this->data['KnowledgeBase']['id_kb']; 

模型內部將其映射到適當的主鍵字段。

在數據,但是你會用實際的主鍵名:

'id_kb' => $this->data['KnowledgeBase']['id_kb'] 

順便說一句,我不知道爲什麼你(重新)建立data陣列,但如果它是確保只有特定的字段被保存,那麼你可以使用fieldList option代替:

$this->data['KnowledgeBase']['kb_last_update'] = date('Y-m-d G:i:s'); 

$options = array(
    'fieldList' => array(
     'kb_title', 
     'kb_content', 
     'kb_last_update', 
     'kb_segment' 
    ) 
); 

$this->KnowledgeBase->save($this->data, $options); 
+0

謝謝您的回答,我還沒有申報的主鍵在我的模型 :) –

+0

非常感謝您的回答。我被困了兩天:D你做了我的一天 – MasterMind

相關問題