Я работаю над приложением в Symfony 3, используя Doctrine.
Всякий раз, когда я сохраняю или обновляю конкретную сущность, мне нужно запрашивать подмножество этих сущностей (того же класса) и обновлять свойство для каждой.
В настоящее время у меня есть класс прослушивателя сущностей с обработчиками postPersist () и postUpdate (), которые вызывают функцию, выполняющую вышеупомянутое поведение.
Однако я обнаружил, что при сохранении изменений для этих других сущностей он вызывает события, приводящие к дополнительным обратным вызовам жизненного цикла для postUpdate () на том же слушателе (как и ожидалось, но нежелательно).
Я хотел бы спросить, не знает ли кто-нибудь о способе подавления этих дополнительных событий или, возможно, есть какие-либо идеи относительно альтернативных решений этого сценария.
Обновление : предоставление примера кода, помогающего проиллюстрировать проблему
// Subscribed Entity Listener for Foo
class FooListener
{
...
public function postPersist(Foo $foo, LifecycleEventArgs $event)
{
...
$this->updateFlaggedFoos($event);
}
public function postUpdate(Foo $foo, LifecycleEventArgs $event)
{
...
$this->updateFlaggedFoos($event);
}
private function updateFlaggedFoos(LifecycleEventArgs $event)
{
$user = $this->tokenStorage->getToken()->getUser();
$entityManager = $event->getEntityManager();
$userFoos = $entityManager->getRepository('MyApp:Foo')->getUserFoos($user);
foreach($userFoos as $foo) {
if ($this->determineIfFlagValueNeedsToChange($foo)) {
$foo->setFlagValue( ! $foo->isFlagged());
$entityManager->persist($foo); // Causes postUpdate() to be called again.
}
}
}
...
}