2014-03-05 2 views
-1

Doctrine을 시작하기 위해 주입 된 데이터가 있습니다.Doctrine이 삽입 된 데이터의 ID를 변경하는 중

내 회원 (사용자) 표는 다음과 같이 데이터가 주입 뭔가

id | first_name | last_name | email | password ... 

다음과 같습니다

INSERT INTO member (id, first_name, last_name, email, password) VALUES (1, "Default", "System", "[email protected]", "system_pass") 

$defaultMember = $repository->findOneBy(array("first_name" => "Default")) 는 회원 객체를 산출 실행하고 _em->contains($defaultMember)는 사실이다. 객체는 심지어 디버거에서 ID 1을 보여줍니다. 그러나 내가 변경을하면 ($defaultMember->setFirstName("Default2")) 데이터베이스로 다시 플러시되고 시퀀스의 다음 ID가 무엇이든 관계없이 새로운 (복제) 멤버를 삽입하려고 시도합니다.

+0

이러한 * 변경 사항을 만드는 코드가 없으면 조언을 제공 할 수 없습니다. – Phil

+0

변경하는 코드를 추가했습니다. 이름은 키 또는 색인의 일부가 아닙니다. –

+0

충분한 코드가 없습니다. 플러시 작업을 위해 repo를 사용하는 것을 전체적으로보아야합니다. – Phil

답변

0

id에 대한 getter/setter (기본 문제인지 확실하지 않음)와 $ this-> getEntityManager()와는 반대로 저장소에서 $ this -> _ em을 사용하여 문제가 해결되었습니다.

0

기존 레코드를 업데이트하는 대신 새 레코드를 삽입하는 것과 비슷한 문제가 있습니다. 내 문제는 $entity2 = clone $entity1에 의해 발생했습니다. 그런 다음 $entity2->name = $newName을 업데이트 한 다음 저장 (persist() 및 flush())을 시도하십시오. ID가 주어지면 기존 레코드를 업데이트 할 것으로 예상했습니다. 그러나 아니오, 그것은 새로운 기록을 삽입했습니다.

xdebug를 사용하여 코드를 추적 한 후 각 객체의 색인이 spl_object_hash($object) 인 것으로 확인되어 $object의 고유 ID를 반환합니다. ID가 색인 된 것과 동일하지 않으면 SF2는 새 레코드를 삽입하려고 시도합니다.

복제 된 개체를 유지하려고 시도했는지 여부는 알 수 없지만 그 이유는 내 것과 같습니다. 그런 식으로 조사를 해보면 원하는대로 작동하게 할 수 있습니다. 그렇지 않으면 사람들이 더 쉽게 당신을 도울 수있는 더 많은 코드를 게시하십시오.

관련 문제