【发布时间】:2013-01-11 22:54:59
【问题描述】:
这与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 [1]:
<?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 记录。
保存记录后,我无法调用外部进程。我也根本无法修改外部流程。
【问题讨论】:
标签: php cakephp cakephp-1.2