我想以CAKEPHP的方式更新数据库,这是我的控制器
$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作为数据库
对不起,我的英语不好,我希望有人能帮助我:(((
您没有提供主键值,这就是原因。
无论您的主键名为(Model::$primaryKey
),在模型对象上,如果要设置主键值,都必须使用id
属性(Model::$id
)。
$this->KnowledgeBase->id = $this->data['KnowledgeBase']['id_kb'];
在内部,模型将其映射到适当的主键字段。
但是,在数据中,您将使用实际的主键名称:
'id_kb' => $this->data['KnowledgeBase']['id_kb']
顺便说一句,我不确定为什么要(重新)构建data
数组,但是如果要确保只保存特定的字段,则可以改用该fieldList
选项:
$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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句