2012-09-24 4 views
2

이것은 본질적으로 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

답변

9

바로 호출하기 전에 당신이 id 필드 또한

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

을 기입하십시오 :

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

꼭 전화하셔야합니다.

$this->create(); 

새 레코드를 만들 수있는 모델 상태가 재설정됩니다. 마지막으로 당신은 시도해야합니다 :

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

을 다른 한편으로 내가 귀하의 게시물과 나는 당신이 혼자 id 필드를 떠나이 foreing 아이디 외래 키 만들려고 노력을 통해 생각하는 것이 좋습니다 당신의 테이블 구조를 상상하려고 노력을 읽을 수있다. 그게 당신을위한 선택입니까?

+0

이것은 작동하지 않습니다. 'save()'되어야 할 레코드가 아직 존재하지 않는다면 Cake는 ID를 false로 설정합니다. 외래 키는 옵션이 아닙니다. 이 질문을 명확히하기 위해 업데이트하겠습니다. – Peter

+0

좋아, 나는 조금 성급했다. 이것은 실제로 효과가 있습니다. 무리 감사! – Peter