gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:06:09 28 4
gpt4 key购买 nike

这与 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 记录。

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


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

最佳答案

如果你想创建一个带有特定 id 的记录,只需确保你填写了 id 字段

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

同样在调用之前:

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

你应该记得打电话

$this->create();

这将重置让您创建新记录的模型状态。最后你应该尝试:

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

另一方面,当我阅读您的帖子并尝试想象您的表结构时,我建议您考虑单独保留 id 字段并尝试使这个外键成为外键。这是您的选择吗?

关于php - CakePHP:插入具有特定 ID 的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12563660/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com