これは本質的に CakePHP と同じ質問です: Is it possible to insert record with pre-defined primary key value? . 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
}
最初にモデルを保存してから id を手動で更新することもオプションではありません。これは、参照整合性が損なわれるためです (これは、私が制御できないアーキテクチャ上の制限です)。
では、特定の主キーを持つレコードを強制的に CakePHP に挿入させるにはどうすればよいでしょうか?
私が直面している問題の背景:
私が取り組んでいるアプリケーションは Postgres データベースに支えられているため、新しい主キーはシーケンスによって決定されます。外部システムがSELECT nextval('my_model_sequence')
その ID を使用していくつかの作業を行い、それを CakePHP アプリケーションに渡すプロセスがあり、そこでその ID をINSERT
持つ my_model レコードが必要です。
レコードを保存した後、外部プロセスを呼び出す方法がありません。外部プロセスを変更する方法もまったくありません。