현재 "더티"버전 (속성의 일부가 변경된 객체, 아직 지속되지 않음) 및 "원래"버전 (데이터는 데이터베이스에 계속 남아 있습니다).Doctrine2 Entites - "더티 (dirty)"객체와 데이터베이스의 객체를 비교할 수 있습니까?
내 가정은 "더러운"개체를 가질 수 있었고 DB에서 새 개체를 가져 와서 두 개체를 비교할 수있었습니다. 예를 들어 :
$entity = $em->getRepository('MyContentBundle:DynamicContent')->find($id);
$editForm = $this->createContentForm($entity);
$editForm->bind($request);
if ($editForm->isValid()) {
$db_entity = $em->getRepository('MyContentBundle:DynamicContent')->find($id);
// compare $entity to $db_entity
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('content_edit', array('id' => $id)));
}
하지만 내 경험
는 $ 엔티티와 $ db_entity는 항상 같은 객체 (및 양식 $ 요청 바인드 후, $ 엔티티와 동일한 데이터를 가지고). 비교를 위해 "더티"버전과 함께 $ 엔티티의 새 버전을 구할 수있는 방법이 있습니까? 필자가 보아온 솔루션은 폼 바인딩이 일어나기 전에 필요한 모든 데이터를 가져 오지만, 그 제한이 없다.업데이트 : 분명히하기 위해 나는 엔티티의 속성뿐만 아니라 엔티티의 관련 컬렉션에 대해서도 살펴 보았습니다.
내가 특별히 부탁 ICAN은 Symfony2 양식 모음에서 항목을 제거에 더 나은 솔루션을 만들 수 있도록.[현재 해결책] (http://symfony.com/doc/2.0/cookbook/form/form_collections.html#templates-modifications) 바인드가 너무 제한적으로 보이기 전에 값을 가져 와서 좋은 함수를 만드는 데 도움이되지 않는 곳 처리해. –
이것은 http://stackoverflow.com/questions/9057558/any-built-in-way-to-all-the-changed-fields-in-doctrine-2/9057705#9057705 – Ocramius
의 사본입니다. 엔터티 자체에 대한 변경 사항을 찾는 것이 아니라 엔터티 내의 관련 컬렉션을 변경하기 때문에 내 질문의 범위를 확장하십시오. UnitOfWork를 사용하면 이전의 작업에만 도움이됩니다. 그러나 다른 find()를 수행하기 전에 $ em-> clear()를 사용하는 Alex의 제안처럼 보이는 것은 내가 찾고있는 "신선한"엔터티를 얻습니다. –