foreach ($uow->getScheduledEntityUpdates() as $entity) {
$this->l('in onFlush');
$changesSet = $uow->getEntityChangeSet($entity);
$this->l($changesSet);
}
private function getAssocSingleChanges(PreUpdateEventArgs $args)
{
$metaData = $this->entityManager->getClassMetadata(get_class($args->getObject()));
//отбираем ассоциации "не коллекции" и только изменненные.
$fields = array_filter($metaData->getAssociationNames(), function ($association) use ($metaData, $args) {
return $metaData->isSingleValuedAssociation($association) && $args->hasChangedField($association);
});
$changedAssociations = [];
foreach ($fields as $field) {
$newValue = $args->getNewValue($field);
$oldValue = $args->getOldValue($field);
$changedAssociations[$field] = array_map(function ($value) {
return $value ? $this->getAssocFieldValue($value) : '';
}, [$oldValue, $newValue]);
}......
//отбираем ассоциации "не коллекции" и только изменненные.
$fields = array_filter($metaData->getAssociationNames(), function ($association) use ($metaData, $args) {
return $metaData->isSingleValuedAssociation($association) && $args->hasChangedField($association);
});
// итерируем $fields и получаем Single ассоциации до и после
$newValue = $args->getNewValue($field);
$oldValue = $args->getOldValue($field);
$em->persist($logRecord);
$uow->computeChangeSet($em->getClassMetadata(get_class($logRecord)), $logRecord);
вы, фактически порождаете потенциально бесконечный цикл
/**
* @param LifecycleEventArgs $args
*/
public function postRemove(LifecycleEventArgs $args)
{
try {
/** @var Entity $entity */
$entity = $args->getObject();
if ($this->skipToHandle($entity)) {
// метод выше проверяет, что обрабатываемая сущность не наш ЛОГ
// соответственно, вызывая для лога $this->entityManager->flush()
// мы не запускаем бесконечный цикл
return;
}
После основного flush'а проверять содержимое коллекции...? postFlush мне не помог.