이것은 본질적으로 CakePHP: Is it possible to insert record with pre-defined primary key value?과 같은 질문입니다. CakePHP 1.2에서는 미리 정해진 id를 가진 레코드를 삽입하고 싶습니다. ID의 값은 외부 시스템에 의해 결정되지만 링크 된 질문과 달리 나는 해당 시스템에 대한 제어권이 없으므로 해당 질문에 대한 해결책은 나를위한 선택 사항이 아닙니다.CakePHP : 특정 ID로 레코드 삽입
$model->save()
을 호출 할 때 모델의 id 필드가 설정된 경우 Cake는 항상 레코드를 업데이트하려고합니다.
<?php
function save($data = null, $validate = true, $fieldList = array()) {
// snip
if (!$this->__exists && $count > 0) {
$this->id = false;
}
// snip
}
먼저 모델을 저장 한 후 ID를 수동으로도 옵션이 아닙니다 갱신이 중단 때문에 : [1] 해당 ID를 가진 레코드가 이미 존재하지 않는 경우 케이크도, false
에 ID를 설정합니다 참조 무결성 (이것은 또한 제어 할 수없는 아키텍처상의 제한입니다).
CakePHP가 특정 기본 키를 사용하여 레코드를 삽입하도록하려면 어떻게해야합니까?
문제 내가 직면하고있어 주변에 어떤 배경 :
내가 일하고 있어요 응용 프로그램은 포스트 그레스 데이터베이스에서 백업은, 그래서 새로운 기본 키는 순서에 의해 결정됩니다. 외부 시스템이 SELECT nextval('my_model_sequence')
이 될 프로세스가 있고, 그 ID로 일부 작업을 수행 한 다음 CakePHP 애플리케이션에 전달합니다. 여기에서 INSERT
my_model 레코드로 id를 지정합니다.
레코드를 저장 한 후 외부 프로세스를 호출 할 방법이 없습니다. 또한 외부 프로세스를 전혀 수정할 수있는 방법이 없습니다. 특정 ID를 가진 레코드를 만들려면
[1] http://api12.cakephp.org/view_source/model/#l-1260
이것은 작동하지 않습니다. 'save()'되어야 할 레코드가 아직 존재하지 않는다면 Cake는 ID를 false로 설정합니다. 외래 키는 옵션이 아닙니다. 이 질문을 명확히하기 위해 업데이트하겠습니다. – Peter
좋아, 나는 조금 성급했다. 이것은 실제로 효과가 있습니다. 무리 감사! – Peter