удаление объектов в списке событий preUpdate - PullRequest
4 голосов
/ 19 января 2012

У меня есть прослушиватель preUpdate для сущности, где я делаю некоторые вычисления, устанавливаю значения и т. Д.

В этом слушателе я хотел бы удалить некоторые другие связанные сущности, но это не сбрасываетсяменеджером организации.Как я могу добиться этого?

Ответы [ 2 ]

8 голосов
/ 20 января 2012

Согласно Doctrine2 docs :

Изменения в ассоциациях обновленного объекта никогда не допускаются в этом событии, поскольку Doctrine не может гарантировать правильную обработку ссылочной целостности на этом этапе.операции сброса.

Это означает, что вы не должны связываться с сущностями во время обработки события preUpdate.Я предлагаю вам перенести свою логику на уровень обслуживания с помощью менеджера сущностей.Напишите конкретный метод для обновления ваших прав и делайте все сложные вещи там.Хорошим примером менеджера сущностей будет FOSUserBundle UserManager

2 голосов
/ 19 января 2012

Если вы вносите изменение в сущность в preUpdate прослушивателе событий, вам нужно указать единице работы пересчитать набор изменений этой сущности:

$em = $eventArgs->getEntityManager();
$cm = $em->getClassMetadata(get_class($entity));

$em->getUnitOfWork()->recomputeSingleEntityChangeSet($cm, $entity);
...