Pet*_*ter 3 php cakephp cakephp-1.2
这与CakePHP基本上是同一个问题:是否可以插入带有预定义主键值的记录?.在CakePHP 1.2中,我想插入一个具有预定ID的记录.id的值由外部系统决定,但与链接问题不同,我无法控制该系统,因此该问题的解决方案对我来说不是一个选项.
如果在调用时设置了模型的id字段$model->save()
,Cake将始终尝试更新记录.false
如果已经存在具有该id的记录,Cake甚至会将id设置为[1]:
<?php
function save($data = null, $validate = true, $fieldList = array()) {
// snip
if (!$this->__exists && $count > 0) {
$this->id = false;
}
// snip
}
Run Code Online (Sandbox Code Playgroud)
首先保存模型然后手动更新id也不是一个选项,因为这会破坏参照完整性(这是我无法控制的架构限制).
那么我如何强制CakePHP插入具有特定主键的记录?
关于我面临的问题的一些背景:
我正在处理的应用程序由Postgres数据库支持,因此新的主键由序列决定.有一个进程,外部系统将SELECT nextval('my_model_sequence')
使用该ID进行一些工作,然后将其传递给CakePHP应用程序,我想要INSERT
一个带有该id的my_model记录.
保存记录后,我无法调用外部进程.根本没有办法修改外部进程.
scx*_*scx 10
如果要创建具有特定ID的记录,请确保填写id字段
$this->data['ModelName']['id'] = $your_id;
Run Code Online (Sandbox Code Playgroud)
在致电之前:
$this->save($this->data);
Run Code Online (Sandbox Code Playgroud)
你应该记得打电话
$this->create();
Run Code Online (Sandbox Code Playgroud)
这将重置模型状态,让您创建新记录.最后你应该尝试:
$this->ModelName->create();
$this->ModelName->save($this->data);
Run Code Online (Sandbox Code Playgroud)
另一方面,当我阅读你的帖子并试图想象你的表格结构时,我建议你考虑单独留下id字段并尝试将这个foreing id作为外键.这是你的选择吗?