CakePHP:插入具有特定ID的记录

时间:2012-09-24 11:01:19

标签: php cakephp cakephp-1.2

这与CakePHP: Is it possible to insert record with pre-defined primary key value?基本相同。在CakePHP 1.2中,我想插入一个具有预定ID的记录。 id的值由外部系统决定,但与链接的问题不同,我无法控制该系统,因此该问题的解决方案不适合我。

如果在调用$model->save()时设置了模型的id字段,Cake将始终尝试更新记录。如果已经存在具有该id的记录,Cake甚至会将id设置为false

<?php
function save($data = null, $validate = true, $fieldList = array()) {
    // snip
    if (!$this->__exists && $count > 0) {
        $this->id = false;
    }
    // snip
}

首先保存模型然后手动更新id也不是一个选项,因为这会破坏参照完整性(这是我无法控制的架构限制)。

那么如何强制CakePHP插入具有特定主键的记录?

围绕我面临的问题的一些背景:

我正在处理的应用程序由Postgres数据库支持,因此新的主键由序列决定。有一个进程,外部系统将SELECT nextval('my_model_sequence'),使用该ID执行一些操作,然后将其传递给CakePHP应用程序,我希望INSERT具有该id的my_model记录。

保存记录后,我无法调用外部进程。我根本无法修改外部流程。


[1] http://api12.cakephp.org/view_source/model/#l-1260

1 个答案:

答案 0 :(得分:10)

如果您想创建具有特定ID的记录,请确保填写id字段

   $this->data['ModelName']['id'] = $your_id;

在致电之前:

    $this->save($this->data);

你应该记得打电话

$this->create();

将重置模型状态,以便您创建新记录。 最后你应该尝试:

   $this->ModelName->create(); 
   $this->ModelName->save($this->data);

另一方面,当我阅读你的帖子并试图想象你的表格结构时,我建议你考虑单独留下id字段并尝试将这个foreing id作为外键。这是你的选择吗?