2012-11-09 2 views
0

다음과 같은 문제가 있습니다. 양식에서 가져온 개체가 있는데, 이전 버전의 양식이 InspectionReport 개체로 저장된 데이터베이스와 결과를 비교합니다.Symfony 1.4 동일한 개체를 2 병합하고 이전 레코드를 업데이트하십시오.

형태의 이전 버전이 사용 이전과 함께 새로운 정보를 병합 :

// $found_inspection_report is the report found in the database, 
// $inspection_report is the one from the form 
$found_inspection_report->merge($inspection_report); 

가 그럼 난 이전으로 데이터베이스에 새 값으로 병합 된 개체를 저장하려면 데이터베이스에서 발견 된 오브젝트.

$found_inspection_report->setId($old_id); 

을 그리고 나는 그것을 절약 해요 : : 병합가 $의 found_inspection_report의 ID를 overwrited 때문에 내가 먼저 예전의 ID를 설정

$found_inspection_report->save(); 

그러나 나는 다음과 같은 오류가 발생합니다 :

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY' 

내 질문에, 거기에 방법을 성공적으로 이전 ID없이 다시 설정하고 업데이트/데이터베이스에서 이전 개체/레코드를 저장할 수 있습니다 병합 할 수 있습니다 새 레코드가 아닌 ID 1을 사용합니다.

답변

1

병합 대신 synchronizeWithArray 메서드를 사용하십시오. 나는이 솔루션을 훨씬 더받지 못했습니다 여기 documentation

$old->synchronizeWithArray($arrayNew); 
$old->save(); 
+0

보기 ... 문제는 내가 새로운 값으로 소재 기존 개체를 업데이트 할 것입니다. 그러나 데이터를 동기화하거나 병합하려고하면 ID가 손실되고 새로운 ID로 저장됩니다. –

+0

"SQLSTATE [23000] : 무결성 제약 조건 위반 : 1062 중복 항목 '1-1'키 'PRIMARY'에 대한 오류없이 데이터베이스에서 검색 한 기존 객체를 저장할 수 없습니다."오류 –