:
postPersist는 - 엔티티가 영속화 된 후 postPersist 이벤트는 개체 발생합니다. 데이터베이스 삽입 조작 후에 호출됩니다. 생성 된 기본 키 값은 postPersist 이벤트에서 사용할 수 있습니다.
그러나 Doctrine2가 기본적으로 트랜잭션을 암시 적으로 호출한다는 점을 고려해야합니다. 이 방법에서는 엔티티 관리자에서 flush()를 사용할 때 트랜잭션이 끝납니다. 따라서 엔티티 관리자를 플러시하지 않는 한 데이터베이스의 데이터를 볼 수 없습니다. EntityManager # flush()는 트랜잭션이 시작되고 끝나는 곳입니다. 그럼에도 불구하고 트랜잭션을 명시 적으로 호출 할 수도 있지만 트랜잭션 시작, 지속 객체 및 커밋 트랜잭션 사이의 데이터를 데이터베이스에서 볼 수는 없습니다.
실제로 Doctrine2에서는 트랜잭션을 생략 할 수 없으므로 PostPersist 이벤트가 발생하면 지속 동작 직후에 데이터가 표시 될 것으로 기대할 수 없습니다.
달성하려면 PostFlush 이벤트를 사용해야합니다. (즉, 자동 번역, 자동 날짜, 일부 특정 관계 업데이트)
는 알림을 보내 생성 된 객체에 의존하는 데이터를 생성
- : 내 실제 삶의 경험에서
Postperist은에 예를 들어, 사용 다른 이벤트
- 보내기 이메일은
난이 도움이되기를 바랍니다.
편집
는 개체에 도착하는 작업 단위를 통해 통과하는 방법의 예를 볼 수 있습니다 onFlush
이벤트의 예를 살펴 보자. onFlush examples
은 사용하는 특정 오브젝트에 대해 작업하려면 :
당신이 PostPersist를 사용하는 이유의 질문을 할 수있는 소셜 네트워크 사이트의 이야기를 가지고 무엇 if ($entity instanceof Product) {
// do something with the YourEntityName
}
? PostPersist를 사용하여 엔티티가 생성 된 후 이벤트를 기반으로 사용자에게 메일을 보냅니다. 따라서 여러분은 엔티티를 생성하는 각 컨트롤러 내에서 매번 플러시 (flush)를 수행 할 필요가 없습니다. – Kwido
주어진 엔터티가 지속될 때마다 발생하는 이벤트 인 경우 [custom event subscriber] (http://symfony.com/doc/current/doctrine/event_listeners_subscribers.html) 사용을 고려하십시오. 그들은 어떤 콜백 이벤트보다도 유연합니다. – ferdynator
@Kwido 소셜 네트워크 예제는 데이터가 아직 PostPersist 콜백 중에 데이터베이스에 삽입되지 않았 음을 설명합니다. 그러나 flush()를 호출 한 후 데이터가 데이터베이스에 삽입되었습니다. – user3502626