微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CakePHP – 为什么Model :: save cause()是INSERT而不是UPDATE?

我想用CAKE PHP的方式更新数据库
这是我的控制器
$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)

为什么函数使用insert查询?没有更新?

注意:我没有使用表单助手发布到控制器,我使用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']

顺便说一句,我不确定你为什么(重新)构建数据数组,但如果要确保只保存特定字段,那么你可以改用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);

原文地址:https://www.jb51.cc/php/138750.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐