【问题标题】:CakePHP - Why does Model::save cause() an INSERT instead of an UPDATE?CakePHP - 为什么 Model::save cause() 是 INSERT 而不是 UPDATE?
【发布时间】:2013-10-11 07:20:02
【问题描述】:

我想以 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);

假设我的 post form 是真的,当我执行程序时 我有这样的错误:

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 用于数据库

对不起我的英语不好,我希望有人能帮助我:(((

【问题讨论】:

    标签: php sql sql-server cakephp cakephp-2.3


    【解决方案1】:

    您没有提供主键值,这就是原因。

    无论你的主键被命名为什么(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);
    

    【讨论】:

    • 谢谢你的回答,我还没有在我的模型中声明主键:)
    • 非常感谢您的回答。我被困了两天:D 你让我很开心
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多